Который является языком более функционального программирования, Haskell или Python? [закрытый]

5
задан Ben James 22 December 2009 в 11:09
поделиться

6 ответов

Вы найдёте много критики в других местах по поводу того, что программисты Python не должны использовать функциональные возможности, такие как lambda. Особенно хорошо в этом разбирается Алекс Мартелли. Но если вы подойдёте к функциональному программированию как программист с Python, вы не почувствуете многого от , почему люди интересуются в первую очередь функциональным программированием. В частности, у вас не будет доступа к мощной системе статических типов и алгебраических типов данных. Эти инструменты определенно являются частью менталитета Хаскелла.

Функциональное программирование - это не столько набор возможностей, сколько образ мышления. Чтобы увидеть этот способ мышления в действии и начать его изучать, обратитесь к статье Джона Хьюза Why Functional Programming Matters. То, что вы узнали от Хьюза, можно легко применить в Хаскелле. На самом деле, Хаскелл скорее всего заставит вас выучить этот новый способ мышления. С помощью Python вы можете использовать несколько ягнят здесь и там и обманывать себя в том, что вы изучаете функциональное программирование. Вы не будете.

Тем не менее, Хаскелл может многое проглотить за один раз. Если вам трудно, вы можете попробовать Стандартный ML или Ракетку (ранее называвшуюся PLT Scheme или DrScheme). Стандартный ML познакомит вас с большим количеством новых идей, но эти люди не имеют возможности вместе приветствовать новичков так, как это делают Рэкетиры или Хаскеллы.

.
33
ответ дан 18 December 2019 в 05:11
поделиться

Haskell является функциональным языком программирования, в то время как Python обладает лишь некоторыми особенностями функциональных языков программирования. Итак, это решено. Q.e.d.

Edit: Чего не хватает на Python, просто для примера один - это оптимизация вызовов рекурсивных функций . Это жизненно важно в большинстве реальных функциональных языков программирования.

Гуглинг, кстати, только что произвел эту милую статью .

.
38
ответ дан 18 December 2019 в 05:11
поделиться

Этот вопрос подчёркивает одну из моих любимых вещей об общем понимании функционального программирования. Наличие таких свойств языка, как закрытие и первоклассные функции, не делает язык функциональным языком программирования . Функциональное программирование касается как специфического стиля программирования , так и специфических конструкций языка. На Python есть замыкания, первоклассные функции и да, даже функция под названием "map", но сам язык поощряет процедурный, ООП, императивный стиль программирования; так что даже если вы используете функциональные возможности, вы все равно программируете императивно.

Как чисто функциональный язык , Хаскелл в основном предписывает, что одна программа в декларативном , функциональном стиле, так что руки вниз, Хаскелл "более функционален", чем Python.

.
11
ответ дан 18 December 2019 в 05:11
поделиться

То, что сказал Болдуин. Хаскелл - один из самых "хардкорных" функциональных языков, поскольку просто нет никакого способа поддерживать мутирующее состояние.

Тем не менее, Хаскелл (неудивительно) сильно отличается от всех императивных и смешанных моделей языков, с которыми большинство людей соприкасается, так что в его подхвате была бы кривая обучения, если бы он исходил из фона, скажем, VB или C(++) или Java.

Питон, с другой стороны, имеет раздел "Функциональное шоу и рассказывание", где горстка функциональных признаков может быть проверена в среде, которая в противном случае была бы преимущественно императивной.

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

.
0
ответ дан 18 December 2019 в 05:11
поделиться

С домашней страницы Haskell:

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

саркастический перевод:

  • "продвинутый" = "Не для всех"
  • "чисто функциональный" = "Определенно "не для всех"
  • "более двадцати лет" = "И все же не всем это нравится!"
  • "передовые исследования" = "Есть шанс, что вы найдете практическую проблему, которую сможете решить с его помощью, но мы все еще работаем над ней!"
  • "робастное, лаконичное, правильное программное обеспечение" = "Вам не хватает простого, понятного, очевидного, читаемого? Угадайте почему!"

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

.
-4
ответ дан 18 December 2019 в 05:11
поделиться

Хотя Python действительно поддерживает некоторые функциональные конструкции, Haskell является функциональным языком. Что вам также необходимо учитывать, так это то, что Haskell также чисто функциональный и ленивый, два понятия, которые могут быть причиной трудностей, которые вы найдете в Haskell. Если это так, читайте дальше.

Что вы можете рассмотреть, если, конечно, у вас есть время, так это изучение другого, менее сложного, функционального языка. Я обнаружил, что изучение менее "агрессивно функционального" языка перед тем, как перейти к Хаскеллу, - это шаг, который стоит сделать. Возможно, вы захотите рассмотреть OCaml (Objective Caml), другой функциональный язык программирования, который не является ни чистым, ни ленивым. Таким образом, вам будут доступны некоторые императивные конструкции программирования (ссылки, циклы, изменяемые массивы и т.д.), и вам не придется справляться с монадами до тех пор, пока вы на самом деле этого не захотите.

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

.
7
ответ дан 18 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: