Любое понимание разработки функционального программирования для решения проблем? - PullRequest
1 голос
/ 08 января 2011

Я изучил несколько статей, несколько глав книг о FP, и я хотел бы много практиковаться в этом, чтобы сделать парадигму FP частью своего разума.Но я все еще не могу этого понять, и в самом деле в себе легко сомневаться.

Ответы [ 4 ]

3 голосов
/ 08 января 2011

Чтобы охватить функциональное программирование, вы должны перестать воспринимать переменные как области памяти, значения которых можно менять снова и снова. Вместо этого думайте о своих данных как о неизменном кусочке, который передается в функцию, создавая еще один неизменный кусочек данных. Если вы использовали конвейеры UNIX (или DOS) , они работают именно так. Цель состоит в том, чтобы связать воедино последовательность функций, которые преобразуют предоставленный ввод в желаемый вывод.

Чтобы попрактиковаться в этом, я предлагаю решить Project Euler на выбранном вами функциональном языке. Если вы еще не выбрали язык, Haskell предлагает меньше нефункциональных отвлекающих факторов, чем большинство языков. Тем не менее, обратитесь к другому вопросу SO , чтобы узнать больше.

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

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

1 голос
/ 08 января 2011

Книги, предназначенные для начинающих программистов, учат понятиям и основам функционального программирования вместе с конкретным языком программирования.Книги были моим путём в Lisp, ML / OCAML и Haskell.

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

Личное мнение (что здесь не нравится) состоит в том, что это легче сделатьболее функциональный в Python, C # или Java, чем в Statefull OO в Haskell или OCAML.Есть несколько прыжков, чтобы прыгнуть, прежде чем кто-то даже начинает понимать концепцию и применение Монад .

1 голос
/ 08 января 2011

http://msdn.microsoft.com/en-us/library/bb669144.aspx

Дает некоторые подробности о разнице с процедурным программированием.

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

«Гедель, Эшер, Бах» Д.Р. Hofstadter, и, конечно, Metamagical Themas, который включал главу о рекурсии и решении Ханойских Башен на Лиспе. Вещи, которые я читал, когда был подростком, и это заставило меня начать программировать.

0 голосов
/ 26 января 2011

Вы можете начать с «Как разрабатывать программы» Феллайзена и соавт.Он ориентирован на решение проблем, IIUC - это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...