Как Lisp связан с F# и действительно ли изучением, что Lisp является полезным участком до F#?

Прочитал все ответы и не нашел ни одного многословного и СУХОГО решения. Я использую этот однострочник:

const modes = ['DRAW', 'SCALE', 'DRAG'].reduce((o, v) => ({ ...o, [v]: v }), {});

он генерирует объект с понятными для человека значениями:

{
  DRAW: 'DRAW',
  SCALE: 'SCALE',
  DRAG: 'DRAG'
}
14
задан Nosredna 23 June 2009 в 16:18
поделиться

9 ответов

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 #.

15
ответ дан 1 December 2019 в 06:48
поделиться

Я думаю, что есть лишь небольшое «совпадение» в том, что вы узнали бы через Common Lisp по сравнению с F #. Общность, на мой взгляд, составляет примерно

  • . Программирование с использованием «cons-списков» как общего фундаментального типа данных, иногда написание рекурсивных (особенно хвостово-рекурсивных) функций, а не циклов
  • Некоторые основные виды использования общих функций высшего порядка (например, 'map' - применить функцию к каждому значению в списке)

Я думаю, что, не считая некоторых основных вещей, связанных с функциональным программированием, Common Lisp и F # так же далеки друг от друга, как два основных 'функциональных' ( не-Haskell) языки могут быть. Common Lisp динамичен; F # статически типизирован. Синтаксические формы совершенно разные. Время выполнения совсем другое. Библиотеки очень разные.

10
ответ дан 1 December 2019 в 06:48
поделиться

На мой взгляд, есть два подхода к изучению функционального программирования:

  1. Использование более чистого функционального языка. как Lisp или Haskell, который заставит вырваться из процедурного образ мышления сразу; или

  2. Используйте прагматичный функциональный язык как F #, который также предлагает больше знакомый, но менее функциональный,

В любом случае, вы получите больше от обучения, если сможете сделать что-нибудь полезное с языком. Похоже, у вас есть мотивация к Lisp (Emacs) и F # (.NET interop), поэтому я хотел бы взглянуть на оба и посмотреть, что привлекает ваше внимание.

В конечном счете, понимание концепций функционального программирования (более высокого порядка) более ценно. функций, без побочных эффектов, хвостовой рекурсии и т. д.), чем на любом одном языке. И как только вы изучите эти концепции, вам будет намного легче освоить новые языки и применять методы на других языках (например, все более функциональный C #). В связи с этим вас может заинтересовать Функциональное программирование для реального мира .

4
ответ дан 1 December 2019 в 06:48
поделиться

Две важные вещи, которые следует учитывать:

  • LISP динамически типизируется, тогда как F # - статически типизированы.
  • LISP имеет встроенные макросы. F # нет.

Хотя они оба считаются функциональными и имеют много общих функций, они также отличаются. Изучение LISP, безусловно, сделает вас лучшим программистом на F # и наоборот, но все же вам придется изучить особенности обоих, чтобы иметь возможность практиковаться в них.

Чтобы иметь возможность взаимодействовать с .NET, я бы определенно выбрал F #, но ради красоты программирования я бы также попробовал LISP.

3
ответ дан 1 December 2019 в 06:48
поделиться

Как язык программирования Lisp сам по себе довольно особенный, но он совсем не похож на F #, за исключением того, что оба они поддерживают функциональное программирование. Не многие языковые конструкции переносятся из Лиспа в F #. Если вы хотите выучить лисп, сделайте это. Идея функционального программирования перенесет только не синтаксис. Лисп действительно старый, конца 50-х годов. Это повлияло на многие языки, и существует довольно много диалектов.

Если вы просто ищете чистый функциональный язык для изучения до F #, я бы предложил Haskell. На Haskell сильно повлиял ML, и он является хорошим языком для перехода на F #, поскольку F # является производным от ML. Вы можете посмотреть код Haskell и увидеть похожие шаблоны в коде F #.

0
ответ дан 1 December 2019 в 06:48
поделиться

Оба они являются функциональными языками, но синтаксически они очень разные. Это означает, что многие из концепций будут похожи, и вам (как процедурному разработчику) придется проделать ту же сложную работу, чтобы использовать любую из них, но это очень разные языки.

F # - это производная от ML (который, со всеми его производными, считается нечистым функциональным языком), тогда как Lisp старше и считается «чистым» функциональным языком.

] Чистота функционального языка - увлекательная тема, и я бы порекомендовал вам прочитать Чистота языка и грязные и чистые функции , чтобы лучше понять концепцию:

Многие люди говорят о «чистом» функциональные языки, где «чистые» кажется синонимом «хорошо». Обычно есть две черты связано с определением чистый функциональный язык:

  1. функции не могут иметь побочных эффектов
  2. функция, вызываемая с любыми заданными аргументами, всегда будет возвращать одни и те же значение.
2
ответ дан 1 December 2019 в 06:48
поделиться

F # наиболее сопоставим с семейством языков ML, таким как SML и CAML. Синтаксис и функции отличаются от Lisp.

Но я думаю, что изучение хотя бы одного функционального языка действительно важно с точки зрения информатики. Умение так думать - это хорошо.

И, я бы сказал, изучение более чисто функционального языка перед запуском F # было бы способом приобрести хорошие навыки функционального программирования, потому что, если вы этого не сделаете, ваш код F # может в конечном итоге становятся более объектно-ориентированными и менее функциональными, потому что это то, откуда вы пришли.

5
ответ дан 1 December 2019 в 06:48
поделиться

Семантика F # и Scheme очень похожа, за исключением отмеченного исключения строгой типизации.

Кроме того, Scheme настолько мала, что ее невозможно изучить!

1
ответ дан 1 December 2019 в 06:48
поделиться

Я новичок только в F #, но я изучал Lisp до F # и считаю, что он очень помог в контекстуализации F # как в рамках .NET framework, так и во всем диапазоне языков программирования.

I ' Я настоятельно рекомендую посмотреть хотя бы несколько первых видео здесь:

http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/

Они научат вас основам Lisp внутри первый час. Серия основывается на этих знаниях и прививает захватывающие принципы, которые вытекают из этого.

2
ответ дан 1 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: