Yaygın liste işleme işlevi adlarının kökeni


11

Listelerde veya dizilerde çalışmak için bazı üst düzey işlevler tekrar tekrar benimsenmiş veya yeniden keşfedilmiştir. Fonksiyonlar haritası , katlama [ l | r ] ve filtre , ortak bir ataya sahip görünmeyen Scheme, ML ve Python gibi çeşitli programlama dillerinde birlikte bulunur. Soruyu odakta tutmak için bu üç isimle gidiyorum.

İsimlerin evrensel olmadığını göstermek için, burada diğer dillerde eşdeğer işlevsellik için bir örnekleme örneği verilmiştir. C ++, harita yerine dönüşüme sahiptir ve filtre yerine kaldırırsa (yüklemin anlamını tersine çevirir ). Lisp vardır mapcar yerine haritası , kaldırma-eğer-değil yerine filtresi ve azaltmak yerine kat (Bazı Modern Lisp var varyantları harita ama bu göründüğü bir olmak türetilmiş formu .) C # kullanır seçin yerine haritası ve nerede yerinefiltre . C # 'ın adları LINQ aracılığıyla SQL'den geldi ve isim değişikliklerine rağmen, işlevleri ML'den etkilenen Haskell'den etkilendi.

İsimleri map , kat ve filtre yaygın, ancak evrensel değildir. Bu, etkili bir kaynaktan diğer çağdaş dillere ödünç alındıklarını göstermektedir. Bu işlev adları nereden geldi?


10
mapküme dönüşümlerini girdi alanından çıktı aralığına "eşlemeler" olarak tanımlayan matematiksel küme teorisinden gelir.
Aidan Cully

2
Lisp's arabada (cdr yerine) mapcarbir harita .

kat adı var çünkü set teorisinde buna katamorfizm deniyor ama bu kesinlikle saçma. Ayrıca foldl, yine SQL terminolojisinden LINQ'da Toplanır.
Jimmy Hoffa

2
Ayrıca, bu diller resmi olarak ortak atalara sahip olmasa da, kesinlikle ileri geri çok fazla etki olduğunu unutmayın. Guido van Rossum, Python'u tasarlamaya başladığında ödevini yapmıştı ve Scheme, Common Lisp, Perl ve (IIRC) Haskell ve ML zaten o sırada vardı.
tdammers

1
filtertam olarak bunu yapar - verileri filtreler. Oldukça açık görünüyor.
Dukeling

Yanıtlar:


4

Listenizdeki tek evrensel kelime mapve 1960'taki Lisp'teki orijinal gazetede (kisvesi altında maplist) zaten var . Makalede ayrıca search(AKA filter, AKA remove-if-not) var.

mapDiğerlerinin varyantları varken kalıcı olmasının sebebi map, nispeten eski, yerleşik, ortak ve ilköğretim matematikten gelirken catamorphism(AKA reduceAKA fold& c) nispeten gelişmiş bir kavramdır, nispeten belirsiz (son zamanlarda CS ile eşzamanlı olarak) bir etki alanıdır. ve on yıldanreduce uzun bir süredir Lisp'te mevcut olduğunda (1980'lerin sonlarında) tanıtıldı .

Diğerleri ( filterAKA remove-if-not) CS / programlamada daha da ad hoc, bu yüzden insanlar onlar için kendi adlarını seçmek daha rahat hissettiler.


1
Kategori teorisini belirsiz bir şekilde "son zamanlarda gelişmemiş bir alan" olarak tanımlamayın, aynı zamanda Lambda hesabı olarak da "son zamanlarda geliştirilen" olarak tanımlayın .
Dan D.

@DanD .: anahtar kelime nispeten
sds

O zaman bile, hepsi SQL'de benzer olacak şekilde .NET'te hata yaptılar. (harita -> Seç; filtre -> Nerede; katla -> Toplam)
Steven Evers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.