Некоторые функции более высокого порядка для работы со списками или массивами неоднократно применялись или переизобретались. Функции отображения , сложите [ л | r ] и фильтр находятся вместе в нескольких языках программирования, таких как Scheme, ML и Python, которые, похоже, не имеют общего предка. Я собираюсь с этими тремя именами, чтобы держать вопрос в фокусе.
Чтобы показать, что имена не являются универсальными, вот выборка имен для эквивалентной функциональности на других языках. C ++ имеет transform вместо map и remove_if вместо filter (полностью изменяя значение предиката). Лисп имеет MAPCAR вместо карты , удалить, если-не вместо фильтра и уменьшить вместо складка (Некоторый современный Лисп варианты есть карта , но это , кажется , быть производной формой .) C # использует Выберите вместо карты и где вместофильтр . Имена C # пришли из SQL через LINQ , и, несмотря на изменения имени, на их функциональность повлиял Haskell, который сам был под влиянием ML.
Названия на карте , сгиб , и фильтр широко распространены, но не универсальна. Это говорит о том, что они были заимствованы из влиятельного источника в других современных языках. Откуда появились эти имена функций?
источник
map
будет происходить из математической теории множеств, которая описывает преобразования множества как «отображения» из входной области в выходной диапазон.mapcar
- это карта на машине (а не на CDR).filter
делает именно это - он фильтрует данные. Кажется довольно очевидным.Ответы:
Единственное универсальное слово в вашем списке,
map
и оно уже фигурирует в оригинальной статье на Лиспе в 1960 году (под видомmaplist
). В документе также естьsearch
(АКАfilter
, АКАremove-if-not
).Я думаю , что причина
map
переносила в то время как другие варианты, чтоmap
исходит от относительно древнего, установленных, поваренного и элементарной математики в то время какcatamorphism
(AKAreduce
AKAfold
& с) представляет собой сравнительно передовые концепции, от А относительно неясной недавно разработанных (более или менее одновременно с CS) доменом и он был введен (в конце 1980-х годов), когдаreduce
был доступен в Лиспе более десяти лет .Другие (
filter
AKAremove-if-not
) еще более специализированы в CS / программировании, поэтому люди чувствовали себя более комфортно, выбирая свое имя для них.источник