F# vs Haskell vs Lisp - какой язык выучить? [закрытый]
Я много слышал о функциональных языках программирования и готов выучить один из них. Я думаю, что это будет в основном для удовольствия, однако, я надеюсь, что это улучшит мои навыки программирования.
У меня в основном фон C#/.NET, поэтому мой первый выбор-изучить F# (из-за .NET и знакомства с Visual Studio). С другой стороны, мне интересно, есть ли у F# такие функции, как макросы Lisp или функции более высокого порядка Haskell.
Не могли бы вы сравнить F#, Haskell и Lisp? Какой из них будет первым? язык по вашему выбору?
9 ответов:
F# - это мой язык выбора, но я настоятельно рекомендую изучить их все. Все они совершенно разные и интересные сами по себе. Вот краткий обзор каждого из них (возможно, с небольшим уклоном F#), вы можете легко найти дополнительную информацию, погуглив:
F# - это язык, который позволяет легко программировать в функциональном стиле, позволяет легко копировать объекты, а не мутировать их. Он также дает вам интересные типы данных, такие как кортежи и алгебраические типы данных, полезный язык такие конструкции, как сопоставление шаблонов и понимание списка. Он также имеет OO и императивные функции и хороший доступ к библиотекам, так как вы можете использовать любой компонент .NET framework.
Haskell-это чистый и ленивый функциональный язык, делающий редкого или даже уникального зверя. Это означает, что нет никаких побочных эффектов вообще, если они не отслеживаются монадой. У Хаскеля тоже есть кортежи, алгебраические данные и сопоставление шаблонов.Lisp-в то время как F# и Haskell статически типизированы, lisp динамически типизированный. Он имеет отличительный синтаксис, который использует много скобок и предоставляет интересную функцию макроса, которая позволяет выполнять преобразования в самой программе и расширять синтаксис.
Однажды у меня был такой же вопрос
С тех пор я немного программировал на F#. Теперь я очень рад, что сделал это, так как это действительно полезно, чтобы понять LINQ в C#, и это случилось, чтобы быть моим фоном тоже. (Я почти никогда не использую foreach в C# с тех пор, как выучил F#)
Я узнал через F# много вещей о ленивой эвалюции, списках и последовательностях, для которых вы можете выбрать любой язык с хорошей поддержкой списков, кортежей и т. д. (Как и любой функциональный язык, я думаю), но если вы выберете 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 динамично типизирован и имеет действительно хороший способ обработки конквентности (один из лучших, я бы сказал).
Кстати. Знаете ли вы, что F# был сделан потому, что Хаскелл был трудно заставить работать на CLR? (Это еще не вся история конечно, но его часть)
Зачем выбирать? Выучите и Лисп, и Хаскелл самостоятельно. Хотя нет смысла изучать F# в свое свободное время. Если вам это нужно для работы, вы узнаете это на работе;)
EDIT: парень искал язык, чтобы изучать его для удовольствия. Ну, Лисп и Хаскелл-хорошие кандидаты, так как веселье-это все, для чего они будут использоваться (там нет платной работы). Он "может" (хотя и маловероятно) иметь возможность использовать F# на работе (он находится в магазине MS), так зачем учиться чему-то в свободное время, когда ему можно платить за обучение на работе.
Я изучил их все в разной степени и посоветовал бы начать со Scheme (диалект Лиспа) - просто потому, что его легче всего выучить. Haskell и F# статически типизированы, что является большим преимуществом для реальных проектов, но IMHO у них немного "слишком много" синтаксиса и их не так легко подобрать, как Scheme.
Есть хорошая реализация схемы для .NET-IronScheme. Вы можете взглянуть на мою статью" Игра с IronScheme ", чтобы увидеть, нравится ли вам это.
Если мы сравним эти три языка, я рекомендую Haskell. Он более практичен, чем LISP, я думаю (потому что это система типов) и более мощный и умный, чем F#. Насколько вам известно, F# - это .NET-порт OCaml, и в какой-то степени он не так идеалистически ясен, как Haskell или OCaml. Я рекомендую вам изучить Haskell или OCaml, чтобы узнать, насколько неубедителен F#.
Comments