Походження загальних списків імен функцій обробки списку


11

Деякі функції вищого порядку для роботи зі списками або масивами були неодноразово прийняті або заново створені. Мапа функцій , скласти [ l | r ], і фільтр зустрічаються разом у кількох мовах програмування, таких як Scheme, ML та Python, які, схоже, не мають спільного предка. Я збираюся з цими трьома іменами, щоб тримати питання зосередженим.

Щоб показати, що імена не є універсальними, ось вибірка імен для еквівалентної функціональності іншими мовами. C ++ має трансформацію замість map та delete_if замість фільтру ( повертає значення присудка). У Lisp замість карти є mapcar , видалити if-not замість фільтру та зменшити замість fold (Деякі сучасні варіанти Lisp мають карту, але це, як видається, є похідною формою .) C # використовує Select замість карти та Where замістьфільтр . Імена C # прийшли з SQL через LINQ , і, незважаючи на зміни імен, на їх функціональність впливав Haskell, на який саме впливав ML.

Мапа , складання та фільтр імен широко поширені, але не є універсальними. Це говорить про те, що вони були запозичені з впливового джерела в інших сучасних мовах. Звідки взялися ці імена функцій?


10
mapпоходила б із теорії математичних множин, яка описує перетворення множин як "відображення" з вхідного домену у вихідний діапазон.
Айдан Каллі

2
Lisp's mapcar- карта на автомобілі (а не компакт-диск).

fold отримав свою назву, тому що в теорії множин це називається катаморфізмом, але це абсолютно смішно. Також foldl є Aggregate в LINQ, знову ж таки з термінології SQL.
Джиммі Хоффа

2
Також зауважте, що, хоча ці мови офіційно не мають спільних предків, все це вплинуло дуже сильно. Гвідо ван Россум зробив домашнє завдання, коли він почав розробляти Python, і Scheme, Common Lisp, Perl та (IIRC) Haskell і ML вже були на той час.
tdammers

1
filterробить саме це - фільтрує дані. Здається, досить очевидно.
Герцогство

Відповіді:


3

Єдиним універсальним словом у вашому списку є, mapі воно вже з’являється в оригінальній статті про Лісп в 1960 році (під виглядом maplist). У папері також є search(AKA filter, AKA remove-if-not).

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

Інші ( filterAKA remove-if-not) ще більше спеціальні в CS / програмуванні, тому людям стало комфортніше вибирати своє ім’я.


1
Не розглядайте теорію категорій як "незрозумілий нещодавно розроблений домен", а також про "недавно розроблений", як обчислення Ламбди .
Ден Д.

@DanD .: ключове слово порівняно
sds

Вже тоді всі вони зазіхають у .NET, щоб вони були схожі на SQL. (карта -> Вибрати; фільтр -> Куди; скласти -> Сукупність)
Стівен Еверс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.