Как Лисп связан с F #, и изучает ли Лисп полезную ногу до F #?

Это ситуация: я в основном программирую на C # и в ней написаны типы, которые я не хочу терять. В то же время я хотел бы научиться функциональному программированию. Очевидный ответ, конечно, F #.

Но для всего, кроме C #, я использую emacs в качестве редактора, и я действительно хотел бы изучить и Lisp. (Изучайте язык ваших редакторов / IDE, который вы знаете, поэтому я знаю немного VB, чтобы писать в нем свои VS-макросы) И это не просто emacs, я действительно хочу выучить Lisp.

Что касается F #, я мог бы смешать его с C # без каких-либо проблем взаимодействия, иметь отличный GUI (WPF) и много других .NET вкусностей. Но он, конечно, не такой зрелый, как Лисп.

Если я реалист, я знаю, хочу ли я пронести функциональный язык в свою профессиональную жизнь, это должен быть F #. Поскольку изучение двух целых языков кажется немного сложным, я надеялся, что Lisp станет отличным способом для изучения функционального программирования, и если я начну F # позже, это будет очень легко ...

Это правда? Или эти два языка вообще не сопоставимы?

23.06.2009 16:04:26
9 ОТВЕТОВ
РЕШЕНИЕ

Лисп - это большое семейство языков и реализаций. Схема, например, представляет собой диалект Lisp с, вероятно, более чем сотней реализаций (около десяти из них слегка популярны). Common Lisp - это еще один диалект, имеющий около десяти поддерживаемых в настоящее время реализаций. Scheme и Common Lisp оба написали стандарты, которые реализации пытаются реализовать.

F # - это и язык, и реализация. От Microsoft. Он был в основном получен из OCAML и принадлежит к семейству языков ML.

Lisp был очень ранним языком, поддерживающим функциональное программирование (Lisp 1.5 в 60-х годах). Много ранних экспериментов с функциональным программированием было сделано в Лиспе. В 70-х годах в сообществе Лисп появилось движение к корням функционального программирования, и в результате появилась Схема . Затем, особенно в 80-х и 90-х годах прошлого столетия, появились новые функциональные языки (ML, Miranda, FP, SML, Haskell, Clean, ...), которые сильно отличались от обычных диалектов Лисп. Есть еще наследие, но в основном они развивались в разных направлениях (статическая типизация, вывод типов, модульные системы, языки пакетной обработки, алгебраические типы данных, ленивая оценка, чистота и многое другое). Сообщество Scheme по-прежнему имеет много контактов с сообществом FP. Но это в основном все.

Есть несколько базовых идей FP, которые можно выучить независимо от конкретного языка FP, но, как правило, F # сильно отличается от большинства диалектов Lisp. Другая особенность, заключающаяся в том, что F # поддерживает экосистему .net (особенно потому, что это создание Microsoft), не очень хорошо поддерживается диалектами Лисп.

Я также не ожидал бы большой пользы от знания ограниченного диалекта Lisp, такого как Emacs Lisp, для изучения F #.

15
23.06.2009 22:31:04
@ Thorbjørn Ravn Andersen: «Lisp» был очень ранним языком, основанным на том, что разработала команда МакКарти. Позже это больше не был язык, потому что это стало семьей связанных языков и диалектов. Больше не было единого языка «Лисп». Ранний Лисп теперь стал историей, и у нас есть разные языки, такие как Scheme, Common Lisp, Clojure, Logo, ...
Rainer Joswig 14.09.2010 12:45:16

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

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

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

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

  1. функции не могут иметь побочных эффектов
  2. функция, вызываемая с любым заданным аргументом, всегда будет возвращать одно и то же значение.
2
23.06.2009 16:22:30
Современные реализации Lisp не являются чисто функциональными, хотя вы можете легко писать чисто функциональные программы.
David Thornley 23.06.2009 16:38:12
Лиспские диалекты обычно не являются чисто функциональными языками.
Rainer Joswig 23.06.2009 18:57:34
Также ничто не мешает вам писать F # в чистом стиле.
VoronoiPotato 26.08.2016 20:36:18

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

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

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

5
23.06.2009 16:22:27
F # не просто сопоставим с ML - это его производная.
Andrew Hare 23.06.2009 16:22:58

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

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

0
23.06.2009 16:58:56
Haskell очень отличается от любых диалектов ML.
Rainer Joswig 23.06.2009 18:55:16
От диалектов да, однако: «Многие черты языка Haskell берут свое начало в ML, и языки имеют довольно схожую внешность». - взято с haskell.org/haskell-history.html
gradbot 23.06.2009 20:10:48
По сути, сообщество FP было разделено, какой механизм оценки использовать по умолчанию. Haskell не строгий, а семья ML строгая. Это имеет огромное значение. Haskell - это стандартный нестрогий язык. Второй Haskell является «чистым» (без побочных эффектов) и интенсивно использует такие конструкции, как монады. МЛ диалекты обычно не чистые. Эти различия в основе этих языковых семейств делают их совершенно разными в использовании.
Rainer Joswig 23.06.2009 20:29:26

Две важные вещи для рассмотрения:

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

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

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

3
23.06.2009 17:40:58

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

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

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

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

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

4
23.06.2009 18:09:46
Вы могли бы быть заинтересованы -> Я да, TX. Далее я думаю, что я иду по сценарию прорыва и начинаю с Лиспа
Peter 23.06.2009 22:19:10

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

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

Помимо некоторых основных функциональных программных приложений, я думаю, что Common Lisp и F # настолько далеки друг от друга, насколько могут быть два основных «функциональных» (не Хаскельских) языка. Common Lisp динамичен; F # является статически типизированным. Синтаксические формы совершенно разные. Время выполнения совершенно другое. Библиотеки очень разные. Объектные системы совершенно разные.

Независимо от того, в каком порядке вы их изучаете, я думаю, что после изучения одного из них будет еще немало узнать в другом (по модулю небольшого совпадения, описанного выше).

10
23.06.2009 18:16:34

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

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

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

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

2
30.06.2009 12:13:49

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

Кроме того, Схема настолько мала, чтобы не изучать ее!

1
30.06.2009 12:24:18