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

Функциональное программирование: лучшая платформа/среда

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

Я загрузил Glasgow Haskell и поэкспериментировал с этим.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Также посмотрите Clojure.

Ответ 6

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

Да.

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

когда-либо пытался Пролог?... это будет

?- bend(your_mind).
Yes


?- bend(X).
X = your_mind

Это дало мне совершенно новую перспективу... много информация out там