Есть ли у кого-нибудь рекомендации по запуску в функциональном программировании?

Я ищу некоторые электронные книги, которые помогут мне в изучении функционального программирования. Я еще не решил, на каком языке я поеду, но я заметил довольно много предубеждений по отношению к LISP, Haskell и F # среди сообщества в StackOverflow. Пока я не уверен, какое направление я возьму, но может ли кто-нибудь порекомендовать какие-либо электронные книги по этому вопросу? Кроме того, если бы кто-нибудь мог представить убедительный аргумент, для которого функциональный язык был бы самым интересным для меня, мне было бы очень интересно услышать ваше мнение.

Меня особенно интересуют электронные книги, потому что мне удалось забить себе приложение для чтения электронных книг Sony на Рождество, и я ищу, чтобы загрузить его полезным материалом для моего бесконечного квеста, чтобы стать лучшим программистом.

Ответ 1

Я рекомендую Haskell. Пожалуйста, ознакомьтесь с этим другим вопросом: Начало работы с Haskell.

Причины в пользу Хаскелла:

  • С личной точки зрения в первую очередь: я потратил значительное количество своих ранних лет программирования, думая о разработке собственного языка программирования. (Например, я настоятельно рекомендую учебник Прагматика программирования языка.) Когда я впервые столкнулся с Haskell, я понял что он включил многие идеи, которые у меня были, плюс еще много, и все это было намного лучше, чем я мог сделать сам.
  • Это очень чистая реализация функциональных идеалов: ленивая (нестрогая) и (полиморфно) статически типизированная. Никаких побочных эффектов!
  • Система своего типа может изменить ваше представление о типах систем. (Умозаключение типа Хиндли-Милнера удивительно.)
  • Его альтернативный взгляд на объектно-ориентированное программирование и полиморфизм велик.

Lisp также является хорошим выбором. Причины в пользу варианта Lisp:

  • Исторически первый функциональный язык программирования (или первый огромный).
  • Мировоззрение "все есть список" очень минималистично, просто и красиво.

Если вы выберите вариант Lisp, я рекомендую Scheme.

Я не использовал OCaml или Ruby, но некоторые из моих друзей клянутся ими, хотя можно утверждать, насколько они функциональны. С другой стороны, их характер "многопарадигмы" делает их очень удобными на практике.

В заключение я предлагаю вам выбрать язык, следующий за советом Алана Перлиса: "Язык, который не влияет на то, как вы думаете о программировании, не стоит знать". Lisp, и Хаскелл изменил мой мир. Я надеюсь, что независимо от того, какой язык вы выберете, он изменит ваш мир.

Ответ 2

Я только начал читать видео-лекции Структура и интерпретация компьютерных программ, и я думаю, что они замечательные. Они принимают Схему, которая является вариантом LISP, как язык программирования. Но это не точка курса: речь идет обо всей концепции "вычислений" и ее последствий.

Ответ 3

Один из лучших учебников по функциональному программированию (мой друг дал мне) Учите вас в Haskell для Great Good!. Этот учебник посвящен Haskell, но основы там очень хорошо представлены в правильном порядке. Мне было очень ясно.

Ответ 4

Очевидно, это зависит.

Вы знакомы с С# и .Net framework? Если это так, то вы начнете использовать F #. Если у вас есть Visual Studio, вы можете играть с F # тоже, чтобы другая кривая обучения сглаживалась.

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

Мои 2 цента/пенс

Ответ 5

Я нахожусь в середине чтения Еще один учебник Haskell и это очень полезная и хорошо написанная книга Haskell.

Ответ 6

Практический, Общий Lisp - фантастическая книга, если вы интересны погружениям в Lisp. Это совсем не так, как многие языки, но я чувствовал, как подталкивать себя к тому, чтобы узнать, что это был один из самых полезных событий в моей карьере программирования. Ограниченный синтаксис делает для очень гибкого языка, который относительно легко учится, но концептуально это займет некоторое время, чтобы обернуть вокруг себя.

Ответ 7

Возможно, один из вариантов заключается в том, чтобы вытащить всю онлайн-версию Real World Haskell?

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

Ответ 8

Я бы порекомендовал любой из ML (стандартный ML или OCaml - хороший) диалекты для языка.

Они оказали огромное влияние на Haskell и представляют собой несколько более мягкое введение в FP, чем Haskell.

Ответ 9

Я бы начал с Lisp (в частности, Scheme), потому что это просто; он имеет очень простой синтаксис и систему статического типа, о которой можно беспокоиться.

Структура и интерпретация компьютерных программ не только познакомит вас с Схемой, но и научит вас всем основным парадигмам программирования. Полный текст доступен по лицензии Creative Commons.

После этого вам будет легче изучать дополнительные функции Haskell, т.е. более сложный синтаксис, ленивую оценку и мощную систему типов.

Ответ 10

"Как создавать программы": http://www.htdp.org/

Кстати, каковы ваши цели?

Ответ 11

Я надеюсь, вы выбрали Erlang или Lisp. (Forth) Там у вас есть самые умные языки, которые я знаю.

Где я должен идти после Erlang, Lisp и Forth, пожалуйста, оставьте комментарий.

Ответ 12

Я бы пошел с "Радостью Clojure".

Я предполагаю, что вы уже знаете Java. Clojure работает на JVM, является чисто функциональным (за некоторыми исключениями, которые могут облегчить параллельное программирование) и является lisp. Он обладает всеми преимуществами упомянутых выше лисп (оптимизация хвостовых опер), с некоторыми огромными преимуществами, такими как совместимость с Java, передовые устойчивые структуры данных и большое и яркое сообщество. Если вы хотите узнать что-то, что однажды у вас есть шанс работать профессионально, перейдите с Clojure (или F #, если вы можете вздрагивать .net).

http://www.manning.com/fogus/

Ответ 13

Я мог бы занять это место, но я говорю, иди за Рубином. Это очень красивый и современный гибридный функциональный язык OO, и он будет мягко познакомить вас с миром функционального программирования. Или любой другой язык с закрытием и функциями высокого порядка (он должен быть либо динамически типизирован, либо с типом вывода, иначе действительно сложно написать функциональный код).

Как только вам станет комфортно работать с Ruby FP, или если вы не хотите слушать мой лучший совет, попробуйте что-нибудь вроде Scheme. Это элегантный и нежный язык.

Если вы начнете с Common Lisp или Ocaml или Erlang или особенно Haskell, вы, скорее всего, испугаетесь, и вы будете чувствовать себя потерянными по разным причинам. Если вам нравится схема, вы можете попробовать их, но я бы посоветовал начать с них. Мало кто идет так далеко.

Ответ 14

Я никоим образом не специалист по этому вопросу, но лично я думаю, что начать с схемы может быть хорошей идеей. Из того, что я знаю, схема представляет собой упрощенную версию LISP, подумайте об этом как о LISP, но только с основными аспектами. Я думаю, что синтаксис схемы чрезвычайно чист, вам нужно пройти круглые скобки, но это действительно помогло мне проникнуться "чувством" функционального программирования, не изучая при этом особенности языка.

Ответ 15

Две великие книги:

"Структура и интерпретация компьютерных программ" (Абельсон и Суссман) и "Концепции, методы и модели компьютерного программирования" (Питер Ван Рой и Сейф Хариди).

Оба охватывают гораздо больше, чем функциональное программирование.

Ответ 17

Я действительно нашел значение в Вкус Haskell. Это беседа Саймона Пейтона Джонса. Это действительно хороший обзор и первый взгляд на язык, ориентированный на программистов, не относящихся к FP.

Часть 2 из беседы и PDF слайдов. Камера никогда не показывает слайды, поэтому PDF действительно помогает.

Ответ 18

Lisps являются единственными с регулярным синтаксисом в ядре и четко определенными стандартами (в случае CL ​​и Scheme). Они составляют для просвещенной езды.

Я рекомендую Common Lisp.

На нем есть хорошие и бесплатные книги для начинающих, посмотрите "Успешный Lisp" Ламкинса и "Практический общий Lisp":

Ответ 19

Для перехода от императивного программирования я бы предложил Криса Смита Программирование F #. Второй комментарий А. Рекса выше о Haskell ресурсах и других участниках о SICP.