Не знаю вообще ни одного функционального языка. С какого легче начать обучение - Haskell или Lisp. И, если Lisp, то какой самый распространенный интерпретатор?
Учи Scheme, к нему в придачу есть хорошая книга - SICP. Выучишь не только Scheme а научишься программить вообще. А там уж сам поймешь нужен тебе Haskell или нет.
>> Насколько понимаю сontinuation в lisp и CPS в чисто функциональном языке несколько разные по возможностям конструкции. Или ошибаюсь ?
см. в Haskell функцию callCC. А CPS бывает не тоьлко в чисто функциональном языке, но и в чисто императивном где возможно рекурсивное определение функций (читай везде).
>Что-то я так и не понял, мне Lisp или Haskell учить? %/
Если хочешь глубоко понять ФП - то Haskell. Но можно сначала SICP почитать и выучить попутно Scheme, потом проще будет + там не только про ФП. А потом можно читать "Write Yourself a Scheme in 48 Hours" - мануал по Haskell где описывается как на нем написать Scheme...
Человеку надо ФП изучить, какая нафиг разница какой язык? Да хоть ВизуальныйВасик один хрен. Как изучая синтаксис и библиотеки языка можно освоить методы ФП? Лучше бы книг каких порекомедовали, а то каждый кулик свое болото хвалит, скала-хуяла, хаскель-хуяскель.
Карочь читай SICP и не парься, задачи из него можешь хоть на С решать,хоть на схеме, хоть на хаскеле, хоть на брейнфаке, хоть на всех сразу. Пользы будет больше однозначно, чем тупо втыкать в Yet Another Haskell Tutorial или "напиши схему за 48 часов". В SICP невьебенный список дополнительной литературы по всем затроутым в книге аспектам (и ФП и ИП и интерпретаторы и ламбды и DSL и моделирование и еще хуй знает чего) - изучать на всю жизнь хватит.
IMHO Haskell - инструмент теоретиков CS. LISP, хоть и не православен, но выучить его проще, чем Haskell и реализаций LISP больше, чем реализаций Haskell => проще выбрать более подходящую реализацию для конкретной задачи. Начать можно с drScheme или проприетарной LispWorks personal edition.
> А количество параметров всегда известно в Хаскелле. Для произвольного числа параметров искаропки нельзя, потому как нельзя в таком случае типы проверить...
> Что-то я так и не понял, мне Lisp или Haskell учить? %/
хз :) Я просто о чем - Чтобы выучить что-то сложное целесообразно начать с простого. Чтобы понять ФП на практике надо выбрать такой язык, в котором было бы не очень много новых для тебя концепций. Мне, например, поскольку я работал в основном с языками вроде Cи и Си# было проще начать с языка со статической типизацией. Я выбрал в качестве исходного Objective Сaml и вообщем-то не пожалел. Если ты имеешь опыт с динамическими языками вроде perl, python и пр., то начать целесообразнее с лиспа. Что касается SICP, то да, книшка интересная и прочитать ее надо, но она слишком заумная чтобы просто понять ФП
> см. в Haskell функцию callCC. А CPS бывает не тоьлко в чисто функциональном языке, но и в чисто императивном где возможно рекурсивное определение функций (читай везде).
Насчет CPS все понятно. Я просто к тому, что continuation на манер lisp-овского гораздо более мощное средство именно за счет использования императивных коснтукций (меняющегося контекста выполнения). Например в python-е и ruby на continuation-ах построены всевозможные генераторы и итераторы.
Начинать что с одного, что с другого - кретинизм. Scheme для обучения проверен временем. К нему есть отточенный годами учебник - SICP. Если будешь до него изучать Common Lisp, то тебе скорее всего покажется, что это - архаичное говно со спецификацией тяжелее задницы мамонта, а с Haskell просто будешь биться головой об стену от непонимания.
А теперь отключи fanboy mode и подумай, без сколько процентов встроенных функций CL можно было бы легко обойтись. Не спеши отвечать, пока не дойдёшь хотя бы до 60%.
>> Тогда так и говори: не "все функции", а "все функции стандартной библиотеки". А вот в хаскеле - именно ВСЕ.
Не только в стандарте. В Scheme есть стандарт де-факто обозначать все функции с побочными эффектами восклицательным знаком (set!, например, хотя это и не функция). Это лучше чем городить огород с монадами.
> Не только в стандарте. В Scheme есть стандарт де-факто обозначать все функции с побочными эффектами восклицательным знаком (set!, например, хотя это и не функция). Это лучше чем городить огород с монадами.
Огород с монадами для моделирования примитивных побочных эффектов это фигня. Иногда очень неудобно иметь структуры данных с неизменяемыми полями. Вместо того, чтобы просто поменять значение некоторого промежуточного узла дерева приходится мутить пересоздание всего дерева с выкидыванием старого узла и вставкой нового. Отсутствие побочных эффектов иногда бесит :)
Согласен. Можно почитать великого дядьку Окасаки, и придумать такую структуру данных с которой будет удобно работать в чистом ФП, но зачем мне себя ограничивать, когда и проще и естественее решить задачу императивно.
> Согласен. Можно почитать великого дядьку Окасаки, и придумать такую структуру данных с которой будет удобно работать в чистом ФП, но зачем мне себя ограничивать, когда и проще и естественее решить задачу императивно.
Потому что в ФП есть некоторые удобные вещи. Вот проникнет достаточно элементов ФП в мэйнстрим (или какой-нибудь гибридный язык станет мэйнстримом) - тогда ФП-языки потеряют статус модных игрушек, и спорить станет не о чем (так было с СП и ООП).
> Вместо того, чтобы просто поменять значение некоторого промежуточного узла дерева приходится мутить пересоздание всего дерева с выкидыванием старого узла и вставкой нового.