Ранее был задан связанный вопрос: "Заменяет ли функциональное программирование шаблоны проектирования GoF" , с отличными ответами.
Эквивалент «шаблонов проектирования» в FP очень расплывчатый. В общем, каждый раз, когда вы видите «образец» в вашем коде, вы должны создавать что-то, чтобы покрыть все его применения единообразным способом. Часто это будет функция высшего порядка.
Например, следующий код C
for (int i = 0; i < n; i++)
if (a[i] == 42)
return true;
return false;
можно подумать о некотором базовом «шаблоне проектирования» - проверке, есть ли какой-то особый элемент в списке. Этот фрагмент может появиться много раз в коде с различными условиями. В FP вы просто используете функцию более высокого порядка несколько раз. Это больше не «шаблон».
Функциональное программирование имеет свои собственные практики, но они сильно отличаются от «шаблонов проектирования» в ООП. Они включают в себя использование полиморфизма, списков, функций высшего порядка, неизменности / чистоты, лени [не все являются существенными или специфичными для FP] ... См. Также «что является основными понятиями FP» . Также, классы типов (Haskell), модули и функторы (OCaml), продолжения , монады , молнии , пальца деревьев , моноиды , стрелки , аппликативные функторы , монадные трансформаторы , многие чисто функциональные структуры данных ( книга * 1033) *) и т. д. Функциональные жемчужины , уже упомянутые Рэндаллом Шульцем, в лучшем случае образуют очень богатый ресурс FP.
Чтобы научиться писать идиоматический код, подойдет любая книга / ресурс на функциональном языке программирования IMHO (например, RWH и LYAH ); различия между императивным и функциональным мышлением всегда объясняются там.
В динамических языках ссылка Джеффа Фостера - хорошая коллекция; здесь - очень умное использование мемоизации в JavaScript, которое можно рассматривать как «шаблон проектирования».