Не знаю вообще ни одного функционального языка. С какого легче начать обучение - Haskell или Lisp. И, если Lisp, то какой самый распространенный интерпретатор?
> Haskell -- сосет, ибо то что не может приспосабливаться -- сосет и умирает.
С чего многоувожаемый ЛОР аналитик сделал такие далеко идущие выводы? Во первых Haskell куда более точно отражает ФП парадигму, а это дает ему право заставлять приспосабливатся к нему, если на то возникнет надобность, во вторых Haskell все-же куда более удобный, "приспасабливаемый" и обладает куда большими возможностями нежели Scheme. Та-же превосходная система типизации, до которой Scheme и бОльшему числу других языков (в том числе императивных) еще сосать, сосать и сосать.
Если именно учить ФП парадигму - то лучше Haskell - будет сложнее, но мозги вправятся надежнее... Чтобы потом на CL не писать "как на С"... А еще на Haskell'е более явно заметны как плюсы так и минусы ФП, а в лиспе больше заметны плюсы и минусы именно Лиспа, которые не всегда относятся к ФП. Опять же у Haskell community более адекватное, а у Лиспа много пионеров - фанбоев...
>Более точно это как? Типа там нет скобок и все такое?
Ну например все функции - функции одной переменной. А еще нет сайд-эффектов неконтролируемых - соответственно referential-transparency. Это так для примера.
>Неее ты гонишь... Это Scheme более удобна и обладает куда большими возможностями чем Haskell
И что такого может Scheme чего не может Haskell? На Haskell'е можно писать как на Scheme, но не наоборот... А еще код на Scheme почти всегда получается длиннее, и почти никогда - короче.
>Дык главный минус хаскеля - его функциональная чистота и все ее минусы есть минусы хаскеля by design. А они минусовее минусов лиспа ;))
Это же его главный плюс. А если это для вас больше минус чем плюс - значит у вас императивное мышление.
Из этого как раз следует что для изучения ФП и выбивания императивной заразы он гораздо более подходит. Опять же проблема утекания абстракций в Лиспе более актуальна, чем в Хаскелле
>> И что такого может Scheme чего не может Haskell? На Haskell'е можно писать как на Scheme, но не наоборот... А еще код на Scheme почти всегда получается длиннее, и почти никогда - короче.
Мантра: на лиспе вообще и на схеме в частности можно писать как на любом языке. Это в лиспе by design. Насчет длины кода - ну несмотря на то, что на хаскеле код и короче, читать его сложнее.
>> Ну например все функции - функции одной переменной. А еще нет сайд-эффектов неконтролируемых - соответственно referential-transparency. Это так для примера.
Каррированные функции есть и в лиспе. Если в лоб то: (define func (lambda (x) (lambda (y) (lambda(z) ...)) Если не в лоб то на это есть макрос.
Про побочные эффекты - зато когда они нужны в хаскеле (пардон но без них никак) начинается изврат с монадами. Тоже для примера - в Scheme все функции без побочных эффектов, кроме тех, которые явно описаны как с побочными и это лучше чем монады, особенно когда без них код в разы понятнее.
>> Это же его главный плюс. А если это для вас больше минус чем плюс - значит у вас императивное мышление.
Это значит не то, что у меня императивное мышление. Это значит, что свобода в выборе парадигмы - это лучше чем когда этой свободы нет. Особенно это хорошо когда свобода существует в рамках одного языка.
>Насчет длины кода - ну несмотря на то, что на хаскеле код и короче, читать его сложнее.
Если вы неосилили Haskell и вам сложнее - это только ваши проблемы.
>Каррированные функции есть и в лиспе. Если в лоб то: (define func (lambda (x) (lambda (y) (lambda(z) ...)) Если не в лоб то на это есть макрос.
Фуу... у вас еще и чтобы лямбду обьявить слово lambda писать надо... А почему бы карринг не сделать искаропки если он оверхеда не создает... Или у вас чтобы partial application делать нужно тоже извращатся? И какое же это ФП?
>Про побочные эффекты - зато когда они нужны в хаскеле (пардон но без них никак) начинается изврат с монадами.
Если вы думете, что Монады - это только для сайдэффектов, то вы глубоко заблуждаетесь. Это просто другой способ структурирования чистого ФП кода. И некий универсальный интерфейс который можно реализовать и получить много готового и отлаженного кода который будет с ним работать и который уже написан. Поэтому авторы библиотек любят делать свои Монады. Из монад описывающих сайдэффекты главные State и IO - причем без State можно обойтись просто код будет более громоздким и хуже читатся. А у IO как раз главное качество ее однонаправленность - то что под нее можно все поднять, но вынуть уже нельзя, что правильно. Монады это не изврат, а наоборот очень гибкий и полезный инструмент, и то что в Хаскелле есть монады - это его плюс, и минус тем языкам где их нет.
> Это же его главный плюс. А если это для вас больше минус чем плюс - значит у вас императивное мышление.
А вот и красноглазики. Увы, мир многообразен, и ни структурное, ни декларативное программирование в полной мере не отражает его природы, поэтому в одних случаях удобнее голимая императивщина, в других - чистая функциональщина. А с вашим фанатизмом - в сад, к девочкам.
>> Фуу... у вас еще и чтобы лямбду обьявить слово lambda писать надо... А почему бы карринг не сделать искаропки если он оверхеда не создает... Или у вас чтобы partial application делать нужно тоже извращатся? И какое же это ФП?
А бля, ну конечно, все языки где ламбду объявляют не через бэкслэш и стрелочку сосут... Про искаропку - карринг не создает оверхеда? Я вас умоляю! Карринг жрет память, потому что нужно хранить контекст кложуры, которая возвращается из каррированной функции. Вот это и есть оверхед, особенно когда карринг просто не нужен.
>А бля, ну конечно, все языки где ламбду объявляют не через бэкслэш и стрелочку сосут... Про искаропку - карринг не создает оверхеда? Я вас умоляю! Карринг жрет память, потому что нужно хранить контекст кложуры, которая возвращается из каррированной функции. Вот это и есть оверхед, особенно когда карринг просто не нужен.
Если у вас язык и компилятор голимый то это ваши проблемы...
>А вот и красноглазики. Увы, мир многообразен, и ни структурное, ни декларативное программирование в полной мере не отражает его природы, поэтому в одних случаях удобнее голимая императивщина, в других - чистая функциональщина. А с вашим фанатизмом - в сад, к девочкам.
Согласен - иногда нужно, но императивный код можно и на Хаскелле писать, например in-place quicksort на MArray - но он гораздо длиннее и не всегда лучше.
Вот точно так же, как в хаскеле можно писать императивный код, в схеме или камле можно устроить и ленивость, и монады. Но тебе, подонку-гуманитарчику, этого не понять - мозгов у тебя маловато. С удовольствием убил бы тебя.
А как у вас в Схеме с pattern matching'ом? А в point-free стиле можно писать? А типы свои рекурсивные можно обьявлять? Типы с несколькими параметрами? Бесконечные последовательности?
>А что в хаскеле кложуры и карринг как то по другому реализованы? Лол.
А твой моск не допускает такой мысли? Что (f a b) и ((f a) b) дают в результате тот же код? Ну вам с вашим кривым самодельным каррингом этого не дано...
>> А как у вас в Схеме с pattern matching'ом? А в point-free стиле можно писать? А типы свои рекурсивные можно обьявлять? Типы с несколькими параметрами? Бесконечные последовательности?
Фу как некрасиво - еще небось и оверхед создает. А можешь lazy pattern matching таким способом сделать? Вобщем создалось у меня впечатление что в Схеме искаропки ничего нет и все костыли городят... Ты кстати не на все мои вопросы ответил...
>> А твой моск не допускает такой мысли? Что (f a b) и ((f a) b) дают в результате тот же код? Ну вам с вашим кривым самодельным каррингом этого не дано...
Твое поколение хаскеллистов вымрет от сахарного диабета - ешьте много синтаксического сахара :)))
>> Фу как некрасиво - еще небось и оверхед создает. А можешь lazy pattern matching таким способом сделать? Вобщем создалось у меня впечатление что в Схеме искаропки ничего нет и все костыли городят... Ты кстати не на все мои вопросы ответил...