Что такое комбинатор ??
Это » функция или определение без свободных переменные » (как определено в SO)?
Или как насчет этого: согласно Джона Хьюза в его известной статье о Стрелках, « комбинатор - это функция, которая строит программные фрагменты из программных фрагментов », что является преимуществом, потому что« ... программист, использующий комбинаторы, создает большую часть желаемой программы автоматически, а не записывает каждую деталь вручную ». Далее он говорит, что map
и фильтр
- два общих примера таких комбинаторов.
Некоторые комбинаторы, которые соответствуют первому определению:
Некоторые комбинаторы, соответствующие второму определению:
Меня не интересует первое определение - оно не поможет мне написать настоящую программу (+1, если вы убедите меня, что я ошибаюсь) . Пожалуйста, помогите мне понять второе определение . Я считаю, что map, filter и reduce полезны: они позволяют мне программировать на более высоком уровне - меньше ошибок, короче и понятнее код.Вот некоторые из моих конкретных вопросов о комбинаторах:
Обновление
Благодаря @C. А. Макканн, теперь я немного лучше понимаю комбинаторы. Но один вопрос все еще остается камнем преткновения для меня:
В чем разница между функциональной программой, написанной с интенсивным использованием комбинаторов, и программой, написанной без них?
Я подозреваю, что ответ заключается в том, что версия с большим количеством комбинаторов является короче, яснее, более общее, но я был бы признателен за более глубокое обсуждение, если возможно.
Я также ищу больше примеров и объяснений сложных комбинаторов (т.е. более сложных, чем fold
) в распространенных языках программирования.