В настоящее время я пишу код на C, C ++ и Python. Я хочу выбрать функциональный язык программирования, и сейчас я склоняюсь к Хаскеллу. Я НЕ хочу начинать здесь войну "Haskell vs Lisp"; что я хочу знать, так это: если я изучу Haskell, прежде всего, для ознакомления с функциональным программированием, какие преимущества я получу от дальнейшего изучения Lisp?
40
Ответы:
Я предлагаю изучать оба, сначала Haskell, затем Common Lisp. Мой опыт работы с Haskell заключался в том, что поначалу статическая типизация казалась ограничивающим раздражением, но как только я к этому привык, я заметил, что за большинством моих ошибок типа были скрыты логические ошибки. Когда вы дойдете до этой точки и следующего этапа, который научится мыслить типами и определять свои собственные типы как средство выражения своего решения, вы будете готовы к Common Lisp.
С Common Lisp вы можете добавлять монады, карри и все, что вам нравится из Haskell, но вы также получаете множественное наследование, как упомянул Фрэнк Шеарар, и универсальные функции с множественной диспетчеризацией, а также усовершенствованную систему обработки исключений.
Так почему бы сначала не изучить Common Lisp? Исходя из процедурного и ООП опыта, мой опыт заключался в том, что я действительно не понимал функциональное программирование, пока мне не пришлось использовать его исключительно. Когда функциональное программирование станет удобным, вы можете добавить остальные инструменты, которые предоставляет Common Lisp, и использовать любой инструмент, который лучше всего подходит для стоящей перед вами задачи.
источник
И, пожалуйста.
Насколько я знаю, Haskell учит вас самым чистым из FP, точно так же, как Smalltalk учит самым чистым из ОО. (Я упоминаю это не для того, чтобы предположить, что ОО и ФП не могут вступать в брак, а потому, что оба эти языка являются языками "драгоценных камней" - основная идея, взятая до крайности.)
Лисп - это действительно семейство языков, поэтому я буду говорить о Common Lisp, потому что это особый член семьи, которую я использую.
Лисп еще будет чему тебя научить
источник
Позже изучение Lisp позволит вам настроить Emacs, который, пожалуй, является самым продвинутым доступным текстовым редактором. Вы не можете сделать это в Хаскеле.
источник
Хаскелл и Лисп - два совершенно разных зверя.
Haskell - своего рода «чисто функциональное программирование в башне из слоновой кости»
Lisp - это своего рода «код-данные-данные / данные-код / создание собственных языковых конструкций». Вы можете манипулировать вашим кодом любым способом, который вы можете себе представить.
Они очень разные. Оба разделяют аспект «функционального программирования», но это действительно маленькая общая черта по сравнению с их различиями. Просто попробуйте их, и вы увидите, насколько они разные!
источник
Основное преимущество, которое я вижу от изучения Lisp, - это изучение того, как интегрировать FP в ориентированный на реальный мир мультипарадигмальный язык, а не только изучать его в контексте академического языка, который подчеркивает чистоту.
источник
Я также пришел из C / C ++ / Python и несколько раз пробовал FP за последние несколько лет. Вначале я посмотрел на Хаскел и не мог понять, что с ним делать, но потом попробовал Окамл, но не стал с этим. Наконец, я начал слышать хорошие слова о Scala, попробовал его и обнаружил, что он мне очень подходит (я также немного занимался Java в прошлом), до такой степени, что после года прыгания в Scala (и отправки 161) У проекта Эйлера проблемы с ним), Хаскелл, похоже, имеет куда больше смысла. На самом деле, я только что заказал пару книг по Haskell и хочу попробовать еще раз, хотя это в значительной степени мотивировано существованием Scalaz.
Таким образом, я нашел, что использование мультипарадигмального языка (то есть Scala, но Lisp, вероятно, тоже подойдет), хороший путь к FP. Но если вы счастливы, погрузившись в Хаскелл (я не был), сделайте это.
источник
Первоначально я пришел из C / C ++ / Ruby и использовал концепции FP в Ruby всякий раз, когда мог. Государство просто повредило мой мозг. Один из моих приятелей позвонил мне однажды, и он попросил меня написать что-нибудь на Хаскеле (моя первая, и, надеюсь, не последняя, работа на Хаскеле!). Я быстро выучил язык и собрал что-то, что сработало. Это не было красиво или что-то еще, но это работало.
Я взял месячный перерыв от Хаскелла, потому что мне нечем было его использовать. Но когда я решил, что мне нужно написать собственное программное обеспечение для блога, я использовал Haskell ( https://symer.io ). Haskell действительно хорош, потому что вы можете разбить проблему на части и реализовать эти части по-разному в зависимости от ввода. Haskell также очень хорошо справляется со сбоями благодаря интеллектуальному боксу ценностей. Есть так много инструментов для работы с этими блоками, что вы просто забываете, что они существуют.
Мой опыт с lisp (Scheme) был полностью отрицательным. Мало того, что у языка не было этих интеллектуальных, простых инструментов, он чувствовал себя так же опасно свободно, как Ruby или JavaScript. Это был ужасный опыт, и он не предлагает ничего нового, кроме Ruby или Python.
C ++ не может держать свечу на Haskell, вне управления памятью. Haskell такой же быстрый (если не быстрый), значительно более лаконичный и намного более безопасный. Но безопасность Хаскелла никогда не мешает.
TL; TR Haskell - это глоток свежего воздуха, а Lisp - немного более функциональный Ruby.
источник