2008-11-01 4 views
12

В последнее время я изучаю и играю с функциональным программированием, исключительно для того, чтобы расширить свое мышление о программировании, потому что считаю «функционально» трудным.Функциональное программирование: лучшая платформа/окружающая среда

Скачайте Glasgow Haskell и поэкспериментируйте с этим.

Что мне интересно, что такое лучшая платформа для Windows, чтобы экспериментировать с FP? Я бы предпочел подход на основе JVM, но другая публикация на SO указала, что реальный язык FP не может быть реализован на JVM из-за отсутствия поддержки хвостовой рекурсии. Что скажешь?

EDIT: Как я уже сказал, я экспериментировал с Хаскеллом с честью; по рекомендации одного из ответов, которые я просматривал на веб-сайте Scala. Оглядываясь на примеры Scala, код кажется более «знакомым» (мой фон - C и Java), но, похоже, более OO/процедурный и менее функциональный. Огромным преимуществом Scala было бы то, что он дает мне инструмент другого языка, который будет использоваться бок о бок с Java и может стать еще одной стрелкой в ​​моем текущем профессиональном колчане, в отличие от исключительно обучения. Когда я получу дальше в Scala, будут ли преобладающие функциональные аспекты, или я склонен в итоге просто написать код OO с некоторым функциональным влиянием? Другими словами, сможет ли Хаскелл усложнять мои предвзятости и быстрее, чем Скала?

+0

* Я бы предпочел подход на основе JVM, но другое сообщение на SO показало, что реальный язык FP не может быть реализован на JVM * Пожалуйста, не верьте этой BS. В JVM есть функциональные языки всех видов и видов: Scala, Clojure (lispy), Yeti (ML-ish) и Frege, который является нестрогим, чистым функциональным языком, который нацелен на совместимость с Haskell. Итак, Haskell - хороший выбор для обучения, и вы можете применить вещи позже к JVM с помощью Frege. – Ingo 2013-04-04 07:26:06

ответ

11

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

Когда вы удовлетворены тем, что вы узнали из Haskell (это будет много!), Вы чтобы выйти и оценить более либеральные функциональные языки, такие как Clojure или Scala. Или вы можете остаться с Haskell, чья библиотечная ситуация на самом деле не так уж плоха. В этот момент речь идет об обстоятельствах и личных предпочтениях.Но для того, чтобы сделать такой выбор, научившись думать «чистым» функциональным способом, я считаю, жизненно важным.

3

Посмотрите на Scala. Он нацелен на JVM, взаимодействует с Java и имеет множество современных функций функционального программирования.

+0

Kiwi, в ответ на ваш EDIT, я согласен с комментариями Маттиаса Бенкарда об опасности скольжения в императивный стиль. Если вы хотите, чтобы вас оспаривали, Haskell - очень хороший выбор. – 2008-11-02 17:31:13

7

Я рекомендую PLT Scheme и SICP. Язык настолько прост, что вы можете быстро перейти к важным понятиям.

12

Отъезд F#. CLR имеет инструкцию .tail, поэтому вы можете написать код F # с хвостовыми вызовами, которые не вызывают StackOverflow (исключение, а не веб-сайт). Here - это видеоролик о F # из PDC.

3

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

0

когда-либо пробовал Пролог? ... что будет

?- bend(your_mind). 
Yes 


?- bend(X). 
X = your_mind 

Это дало мне совершенно новую перспективу в любом случае ... plentyinfooutthere

+0

Это не функциональное программирование, я не думаю. – Claudiu 2008-11-02 01:28:44

+0

Prolog - это язык логического программирования, связанный с, но не функциональным языком. – 2008-11-02 03:02:21

5

Другими словами, сможет ли Haskell усложнить мои предубеждения и быстрее, чем Scala?

Да.

Если вы действительно хотите учиться, выходите далеко за пределы своей зоны комфорта.

Вы действительно собираетесь использовать Scala для производственного кода в течение следующих 3 месяцев, так или иначе?

6

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

Учитывая то, о чем вы просите, я бы порекомендовал GHC Haskell. Ничто не будет так сильно искажать вашу голову. :-) С учетом сказанного, я думаю, вы все равно должны следить за Скалой. Есть много аспектов языка, которые являются положительно уникальными, особенно его система типов (структурный + номинальный подтипирование == сладкий). Это не повредит вашей голове так сильно, как Haskell, но это даст вам представление о некоторых концепциях, которые вы, возможно, не найдете нигде, особенно методологии так называемого «программируемого программирования».

О, и чтобы ответить на вторую часть вашего вопроса (FP vs OO в Scala), я склонен писать свой код в функциональном стиле в объектно-ориентированной структуре. Это сложно описать, но так оно и есть. Подумайте об этом, как о разработке API с объектно-ориентированной точки зрения, но о реализации всего в функциональном стиле. Я держу вещи неизменными и трачу много времени на использование методов более высокого порядка, но я делаю все это в рамках наследования и условного номинального подтипирования. Каждый раз так часто я буду писать что-то императивное, но только тогда, когда это более чистое, чем использовать функциональный стиль.

 Смежные вопросы

  • Нет связанных вопросов^_^