F# vs Haskell vs Lisp - какой язык изучать? [закрытый]

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

У меня в основном есть фон C#/.NET, поэтому мой первый выбор-изучить F# (из-за .NET и знакомства с Visual Studio). С другой стороны, мне интересно, есть ли у F# такие функции, как макросы Lisp или функции более высокого порядка Haskell.

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

9 ответов


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

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

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

Lisp-тогда как F# и Haskell статически типизированный, lisp динамически типизируется. Он имеет отличительный синтаксис, который использует множество скобок и предоставляет интересную функцию макроса, которая позволяет выполнять преобразования в саму программу и расширять синтаксис.


У меня был тот же вопрос после

с тех пор я сделал некоторые программирования в F#. Теперь я очень рад, что сделал это, так как действительно полезно понять LINQ в C#, и это тоже было моим фоном. (Я почти никогда не использую foreach в C# теперь, так как я узнал F#)

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

Я начал здесь: очень хороший видео-учебник, очень впечатляющий и очень вдохновляющий репетитор.


В настоящее время я смотрю эти видео на канале 9 по основам функционального программирования. Это объясняется использованием Haskell, но основы применимы ко всем языкам. Должен сказать, это очень информативно и легко понять.


никто на самом деле не ответил на этот конкретный вопрос: "Интересно, есть ли у F# такие функции, как макросы Lisp или функции высшего порядка Haskell."

F# не предлагает макросы. Кроме того, он не предлагает более высоких типов (что, как я думал, вы спрашивали сначала).

F# предлагает функции более высокого порядка, в которых вы можете легко написать функцию, которая принимает функцию и возвращает функцию. На самом деле, C# (или действительно любой язык .NET) может сделать это как Func делегат является частью .NET framework.


Это очень субъективный вопрос.

мое мнение, что схема (вариант Lisp) и чтение SICP - это правильно. Ты многому научишься.

но для практических целей, и если вы разработчик .NET, то, возможно, F# лучше.


Я не знаю F#, но мне нравится иногда играть с ним. Мой язык Clojure, который является очень функциональным и работает в среде CLR тоже, но версия JVM является основной версией.

это за кадром вы много вещей, которые вы хотите. Основное отличие от F# заключается в том, что Clojure динамично типизирован и имеет действительно хороший способ обработки concurency (один из лучших, я бы сказал).

кстати. Знаете ли вы, что F# был сделан, потому что Haskell было трудно работать на CLR? (Это не вся история, конечно, но ее часть)


Почему? Изучайте Lisp и Haskell самостоятельно. Нет смысла изучать F# в свободное время. Если вам это нужно для работы, вы узнаете это на работе;)

EDIT: парень смотрел на язык, чтобы учиться для удовольствия. Ну, Lisp и Haskell-хорошие кандидаты, так как веселье-это все, для чего они будут использоваться (там нет платных рабочих мест). Он "может" (хотя и маловероятно) иметь возможность использовать F# на работе (он находится в MS shop), так зачем учиться чему-то в свободное время, когда ему можно заплатить учусь на работе.


Я изучил их все в разной степени и посоветовал бы начать со схемы (шепелявый диалект) - просто потому, что это легче всего узнать. Haskell и F# статически типизированы, что является большим преимуществом для реальных проектов, но IMHO они имеют немного "слишком много" синтаксиса и не так легко подобрать, как схема.

существует хорошая реализация схемы для .NET-IronScheme. Вы можете взглянуть на мою статью "игра с IronScheme", чтобы увидеть, если вам нравится он.


Если мы сравним эти три языка, я рекомендую Haskell. Это более практично, чем LISP, я думаю (потому что это система типов) и более мощная и умная, чем F#. Насколько вы знаете, F# - это .NET-порт OCaml, и в какой-то степени он не идеолигально ясен, как Haskell или как OCaml. Я рекомендую вам изучить Haskell или OCaml, чтобы узнать, насколько неубедителен F#.