Некоторые функции более высокого порядка для работы со списками или массивами неоднократно применялись или переизобретались. Функции отображения , сложите [ л | r ] и фильтр находятся вместе в нескольких языках программирования, таких как Scheme, ML и Python, которые, похоже, не имеют общего предка. Я собираюсь с этими тремя именами, чтобы держать вопрос в фокусе.
Чтобы показать, что имена не являются универсальными, вот выборка имен для эквивалентной функциональности на других языках. C ++ имеет transform вместо map и remove_if вместо filter (полностью изменяя значение предиката). Лисп имеет MAPCAR вместо карты , удалить, если-не вместо фильтра и уменьшить вместо складка (Некоторый современный Лисп варианты есть карта , но это , кажется , быть производной формой .) C # использует Выберите вместо карты и где вместофильтр . Имена C # пришли из SQL через LINQ , и, несмотря на изменения имени, на их функциональность повлиял Haskell, который сам был под влиянием ML.
Названия на карте , сгиб , и фильтр широко распространены, но не универсальна. Это говорит о том, что они были заимствованы из влиятельного источника в других современных языках. Откуда появились эти имена функций?
mapcar
- это карта на машине (а не на CDR).
filter
делает именно это - он фильтрует данные. Кажется довольно очевидным.
map
будет происходить из математической теории множеств, которая описывает преобразования множества как «отображения» из входной области в выходной диапазон.