F # vs Haskell vs Lisp - на каком языке учиться?
Я много слышал о функциональных языках программирования, и я готов их изучить. Наверное, это будет в основном для удовольствия, однако я надеюсь, что это улучшит мои навыки программирования.
У меня в основном фон С#/. NET, поэтому мой первый выбор - изучить F # (из-за .NET и знакомства с Visual Studio). С другой стороны, мне интересно, есть ли у F # функции, такие как макросы Lisp или функции более высокого порядка Haskell.
Не могли бы вы сравнить F #, Haskell и Lisp? Какой из них будет языком по вашему выбору?
Ответы
Ответ 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 #.