Доступная книга по функциональному программированию [закрыто]

17

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

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

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

Antonio2011a
источник
3
Мне любопытно, был ли какой-то конкретный язык, который вы имели в виду, когда говорили, что не хотите использовать «эзотерический язык».
MatrixFrog
@MatrixFrog: Я на 99% уверен, что под «эзотерическим языком» он имел в виду Схему. Он, вероятно, знал, что SICP будет первой рекомендованной книгой.
user16764
@ user16764 а "доступно"? Это будет « Как разрабатывать программы» (или 2-е изд. ) На основе обоснования, приведенного автором (ами) в «Структуре и интерпретации учебного плана по информатике» .
Марк С

Ответы:

13

Я бы посоветовал начать с « Маленького интриганки » (и, возможно, после этого «Разумного интриганки »).

Если вы думаете, что Схема слишком эзотерична, или вам нравится Javascript, Дуглас Крокфорд перевел многие из упражнений на Javascript: http://javascript.crockford.com/little.html

Если вам нравится C #, " Функциональное программирование в реальном мире " Томаса Петричека было бы отличным местом для начала. Это также служит хорошим введением в F #.

ПМН
источник
10

Если вам нравятся статически типизированные языки и [скобки]:

Haskell, хотя и довольно сложный в парадигме программирования, имеет одно из лучших введений в язык, который я когда-либо видел, в форме «Изучу тебя на Haskell для большого блага!». Бланк книги необязателен, так как веб-сайт бесплатный, но это один из авторов, который меня совершенно не впечатлил. Реальный мир Haskell хорош, но на самом деле его лучше воспринимать как продолжение [Learn..Good]. RWH также свободен с дополнительным бумажным совершенством.

Из Haskell вы можете легко перейти на другие варианты ML, такие как F # или OCaml, оба из которых более широко используются. Для истекающего кровью АТС .

Если вам нравится (и скобки Dynamic_Typing):

Схема является более функционально ориентированной из двух основных диалектов Лисп, меньше и чище, чем Common Lisp, но менее широко используется в промышленности. Мне лично нравится «Структура и интерпретация компьютерных программ», но это довольно трудоемкая книга, которую трудно проглотить, и она сделает вас лучшим программистом.

Если вы предпочитаете Common Lisp, то Практический Common Lisp или Land of Lisp кажутся хорошими инвестициями, первый - бесплатный онлайн, а второй - довольно дешевый и, что более важно (для некоторых), ориентирован на игру. Он более мощный, но менее чистый, чем Схема.

Из них вы можете расширить в Clojure, если хотите. Это Lisp для JVM, так что его легче развернуть и лучше защитить от обвинений в «академичности». Clojure может развертываться в .NET и переходить на Javascript. Для нативного .NET попробуйте IronScheme .

Вы также можете разделить разницу и выучить оба вида одновременно с помощью « Напишите себе схему» за 48 часов в Хаскеле.

Мировой инженер
источник
Если вы пойдете с SICP, в книге также есть много видео лекций, наиболее известные из них: groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures Пол Грэм - хороший писатель и имеет бесплатную книгу о почему пчела колени пчелы paulgraham.com/onlisptext.html
симораман
1
Я читаю бесплатную онлайн-версию Real World Haskell, и возможность читать комментарии во время чтения текста чрезвычайно полезна. Так что, даже если вы получите бумажную версию, вы также можете прочитать онлайн-версию. Некоторые части просто менее запутаны с комментариями.
MatrixFrog
4

Мой любимый источник - Нежное Введение в Haskell . Я читаю часть « Изучаю тебя на Haskell» и « Реальном мире Хаскелла» О'Рейли и « Ремесла функционального программирования» Саймона Томпсона , но, честно говоря, добиваюсь большего успеха благодаря мягкому вступлению. Это похоже на K & R на Haskell: тонкий документ, созданный создателями языка. Не многословно, не покровительственно, но и не пытаюсь завалить вас своей эрудицией.

JohnL4
источник
1
Gentle Введение очень прямой и без излишеств, так же, как твердой удар в живот. Он мягок в том смысле, что совершает насилие без злого умысла, не стремясь ни потаскать, ни доминировать; скорее, в надежде, что читатель обнаружит внутреннюю силу, необходимую для борьбы.
CA Макканн
1
Хм, сенсей, я не уверен, что буду использовать эти образы, но что угодно. Это не насилие и не проблема внутренней силы, но я согласен с остальными. «Нежный» здесь немного юмористический. Нравится "скромное предложение".
JohnL4
1
Да, я взял некоторую ... небольшую творческую свободу там. ;] Требуется немного умственной стойкости, чтобы пройти через нечто столь тупое по сравнению с другим вводным материалом в эти дни (для любого языка, не только для Haskell). Сравнение с K & R заставляет меня думать, что вы привыкли к такому стилю. Я обычно предполагал, что «нежный» подразумевается в отличие от изучения из отчета Haskell и стека исследовательских работ.
CA Макканн
1

http://hop.perl.plover.com/ включает в себя книгу, которую вы можете скачать бесплатно. Он объясняет, как использовать многие функциональные приемы в Perl.

Большая часть того, что написано, может быть легко переведена на JavaScript, Ruby или Python.

btilly
источник
1

В настоящее время я изучаю функциональное программирование самостоятельно. Однако я учусь на Haskell.

Вот пара онлайн-книг (вы также можете купить их в твердом переплете iirc)

Haskell не является сложным и становится все более популярным (возможно, не таким массовым, как LISP или Erlang). Однако это чисто функциональный язык, и он заставит вас выучить парадигму функционального программирования. В отличие от наполовину обязательного полуфункционального подхода, который вы получите, используя не чисто функциональный язык.

Люди разработали WebServers, Bittorrent Clients и несколько реальных приложений, использующих haskell. Однако я лично использую его для изучения концепций, а затем применяю это к C # & F #, который до сих пор работал фантастически.

Наслаждаться.

Джастин Шилд
источник
1

Я слышал хорошие вещи о «Структуре и интерпретации компьютерных программ» несколько раз. Это настоящая книга, поэтому, возможно, вы захотите получить ее и на бумаге, см. Http://www.amazon.co.uk/Structure-Interpretation-Computer-Electrical-Engineering/dp/0262510871 .

Это бесплатно доступно здесь http://mitpress.mit.edu/sicp/ ( http://mitpress.mit.edu/sicp/full-text/book/book.html ), и есть даже видео лекций ( http: //groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ )

Питер Кофлер
источник
SICP был хорош, но не доступен по моему опыту.
Виллем