Подтвердить что ты не робот

F # vs Haskell vs Lisp - на каком языке учиться?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

У меня был тот же вопрос один раз

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Мое мнение таково: схема (вариант Lisp) и чтение SICP - это правильная вещь. Вы узнаете много.

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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