Прочитал все ответы и не нашел ни одного многословного и СУХОГО решения. Я использую этот однострочник:
const modes = ['DRAW', 'SCALE', 'DRAG'].reduce((o, v) => ({ ...o, [v]: v }), {});
он генерирует объект с понятными для человека значениями:
{
DRAW: 'DRAW',
SCALE: 'SCALE',
DRAG: 'DRAG'
}
Lisp - это большое семейство языков и реализаций. Например, Scheme - это диалект Лиспа, у которого, вероятно, более ста реализаций (около десяти из них умеренно популярны). Common Lisp - это еще один диалект с примерно десятью поддерживаемыми в настоящее время реализациями. Scheme и Common Lisp написали стандарты, которые реализации пытаются реализовать.
F # - это и язык, и реализация. От Microsoft. В основном он был получен из OCAML и принадлежит к семейству языков ML.
Лисп был очень ранним языком, поддерживающим функциональное программирование (Лисп 1.5 в 60-х годах). Многие ранние эксперименты с функциональным программированием проводились на Лиспе. В 70-х годах в сообществе Lisp произошло движение к истокам функционального программирования, и результатом стала Scheme . Затем, особенно в 80-х и 90-х годах прошлого века, появились новые функциональные языки (ML, Miranda, FP, SML, Haskell, Clean, ...), которые сильно отличались от обычных диалектов Lisp. Есть еще некоторое наследие, но в основном они развивались в разных направлениях (статическая типизация, вывод типов, системы модулей, пакетные языки, алгебраические типы данных, ленивое вычисление, чистота и многое другое). Сообщество Scheme по-прежнему поддерживает множество контактов с сообществом FP. Но в основном это все.
Есть несколько основных идей FP, которые можно изучить независимо от конкретного языка FP, но в целом F # сильно отличается от большинства диалектов Lisp. Другая особенность, которую F # поддерживает экосистему .net (тем более, что это создание Microsoft), не так хорошо поддерживается диалектами Lisp.
Я также не ожидал бы большой пользы от знания ограниченного диалекта Lisp, такого как Emacs Lisp, для изучения F #.
Я думаю, что есть лишь небольшое «совпадение» в том, что вы узнали бы через Common Lisp по сравнению с F #. Общность, на мой взгляд, составляет примерно
Я думаю, что, не считая некоторых основных вещей, связанных с функциональным программированием, Common Lisp и F # так же далеки друг от друга, как два основных 'функциональных' ( не-Haskell) языки могут быть. Common Lisp динамичен; F # статически типизирован. Синтаксические формы совершенно разные. Время выполнения совсем другое. Библиотеки очень разные.
На мой взгляд, есть два подхода к изучению функционального программирования:
Использование более чистого функционального языка. как Lisp или Haskell, который заставит вырваться из процедурного образ мышления сразу; или
Используйте прагматичный функциональный язык как F #, который также предлагает больше знакомый, но менее функциональный,
В любом случае, вы получите больше от обучения, если сможете сделать что-нибудь полезное с языком. Похоже, у вас есть мотивация к Lisp (Emacs) и F # (.NET interop), поэтому я хотел бы взглянуть на оба и посмотреть, что привлекает ваше внимание.
В конечном счете, понимание концепций функционального программирования (более высокого порядка) более ценно. функций, без побочных эффектов, хвостовой рекурсии и т. д.), чем на любом одном языке. И как только вы изучите эти концепции, вам будет намного легче освоить новые языки и применять методы на других языках (например, все более функциональный C #). В связи с этим вас может заинтересовать Функциональное программирование для реального мира .
Две важные вещи, которые следует учитывать:
Хотя они оба считаются функциональными и имеют много общих функций, они также отличаются. Изучение LISP, безусловно, сделает вас лучшим программистом на F # и наоборот, но все же вам придется изучить особенности обоих, чтобы иметь возможность практиковаться в них.
Чтобы иметь возможность взаимодействовать с .NET, я бы определенно выбрал F #, но ради красоты программирования я бы также попробовал LISP.
Как язык программирования Lisp сам по себе довольно особенный, но он совсем не похож на F #, за исключением того, что оба они поддерживают функциональное программирование. Не многие языковые конструкции переносятся из Лиспа в F #. Если вы хотите выучить лисп, сделайте это. Идея функционального программирования перенесет только не синтаксис. Лисп действительно старый, конца 50-х годов. Это повлияло на многие языки, и существует довольно много диалектов.
Если вы просто ищете чистый функциональный язык для изучения до F #, я бы предложил Haskell. На Haskell сильно повлиял ML, и он является хорошим языком для перехода на F #, поскольку F # является производным от ML. Вы можете посмотреть код Haskell и увидеть похожие шаблоны в коде F #.
Оба они являются функциональными языками, но синтаксически они очень разные. Это означает, что многие из концепций будут похожи, и вам (как процедурному разработчику) придется проделать ту же сложную работу, чтобы использовать любую из них, но это очень разные языки.
F # - это производная от ML (который, со всеми его производными, считается нечистым функциональным языком), тогда как Lisp старше и считается «чистым» функциональным языком.
] Чистота функционального языка - увлекательная тема, и я бы порекомендовал вам прочитать Чистота языка и грязные и чистые функции , чтобы лучше понять концепцию:
Многие люди говорят о «чистом» функциональные языки, где «чистые» кажется синонимом «хорошо». Обычно есть две черты связано с определением чистый функциональный язык:
- функции не могут иметь побочных эффектов
- функция, вызываемая с любыми заданными аргументами, всегда будет возвращать одни и те же значение.
F # наиболее сопоставим с семейством языков ML, таким как SML и CAML. Синтаксис и функции отличаются от Lisp.
Но я думаю, что изучение хотя бы одного функционального языка действительно важно с точки зрения информатики. Умение так думать - это хорошо.
И, я бы сказал, изучение более чисто функционального языка перед запуском F # было бы способом приобрести хорошие навыки функционального программирования, потому что, если вы этого не сделаете, ваш код F # может в конечном итоге становятся более объектно-ориентированными и менее функциональными, потому что это то, откуда вы пришли.
Семантика F # и Scheme очень похожа, за исключением отмеченного исключения строгой типизации.
Кроме того, Scheme настолько мала, что ее невозможно изучить!
Я новичок только в F #, но я изучал Lisp до F # и считаю, что он очень помог в контекстуализации F # как в рамках .NET framework, так и во всем диапазоне языков программирования.
I ' Я настоятельно рекомендую посмотреть хотя бы несколько первых видео здесь:
http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/
Они научат вас основам Lisp внутри первый час. Серия основывается на этих знаниях и прививает захватывающие принципы, которые вытекают из этого.