Происхождение общих имен функций обработки списка

11

Некоторые функции более высокого порядка для работы со списками или массивами неоднократно применялись или переизобретались. Функции отображения , сложите [ л | r ] и фильтр находятся вместе в нескольких языках программирования, таких как Scheme, ML и Python, которые, похоже, не имеют общего предка. Я собираюсь с этими тремя именами, чтобы держать вопрос в фокусе.

Чтобы показать, что имена не являются универсальными, вот выборка имен для эквивалентной функциональности на других языках. C ++ имеет transform вместо map и remove_if вместо filter (полностью изменяя значение предиката). Лисп имеет MAPCAR вместо карты , удалить, если-не вместо фильтра и уменьшить вместо складка (Некоторый современный Лисп варианты есть карта , но это , кажется , быть производной формой .) C # использует Выберите вместо карты и где вместофильтр . Имена C # пришли из SQL через LINQ , и, несмотря на изменения имени, на их функциональность повлиял Haskell, который сам был под влиянием ML.

Названия на карте , сгиб , и фильтр широко распространены, но не универсальна. Это говорит о том, что они были заимствованы из влиятельного источника в других современных языках. Откуда появились эти имена функций?

Радиатор
источник
10
mapбудет происходить из математической теории множеств, которая описывает преобразования множества как «отображения» из входной области в выходной диапазон.
Эйдан Калли
2
Лисп mapcar- это карта на машине (а не на CDR).
Свернуть получил свое название, потому что в теории множеств это называется катаморфизмом, но это просто смешно. Также foldl - это Aggregate in LINQ, опять же из терминологии SQL.
Джимми Хоффа
2
Также обратите внимание, что, хотя эти языки официально не имеют общих предков, влияние было очень много, туда и обратно. Гвидо ван Россум сделал свою домашнюю работу, когда начал разрабатывать Python, а Scheme, Common Lisp, Perl и (IIRC) Haskell и ML были уже в то время.
tdammers
1
filterделает именно это - он фильтрует данные. Кажется довольно очевидным.
Dukeling

Ответы:

3

Единственное универсальное слово в вашем списке, mapи оно уже фигурирует в оригинальной статье на Лиспе в 1960 году (под видом maplist). В документе также есть search(АКА filter, АКА remove-if-not).

Я думаю , что причина mapпереносила в то время как другие варианты, что mapисходит от относительно древнего, установленных, поваренного и элементарной математики в то время как catamorphism(AKA reduceAKA fold& с) представляет собой сравнительно передовые концепции, от А относительно неясной недавно разработанных (более или менее одновременно с CS) доменом и он был введен (в конце 1980-х годов), когда reduceбыл доступен в Лиспе более десяти лет .

Другие ( filterAKA remove-if-not) еще более специализированы в CS / программировании, поэтому люди чувствовали себя более комфортно, выбирая свое имя для них.

ДСН
источник
1
Не смело называйте теорию категорий «неясной недавно разработанной областью», и она примерно так же «недавно разработана», как лямбда-исчисление .
Дэн Д.
@DanD .: ключевое слово относительно
sds
Даже в этом случае все они получили ошибки в .NET, так что они были бы похожи на SQL. (карта -> Выбрать; фильтр -> Где; сложить -> Агрегировать)
Стивен Эверс