Asal nama-nama fungsi pemrosesan daftar yang umum


11

Beberapa fungsi tingkat tinggi untuk beroperasi pada daftar atau array telah berulang kali diadopsi atau diciptakan kembali. Fungsi peta , lipat [ l | r ], dan filter ditemukan bersama dalam beberapa bahasa pemrograman, seperti Skema, ML, dan Python, yang tampaknya tidak memiliki leluhur yang sama. Saya akan menggunakan ketiga nama ini untuk menjaga fokus pertanyaan.

Untuk menunjukkan bahwa nama-nama itu tidak universal, berikut adalah contoh nama untuk fungsi yang setara dalam bahasa lain. C ++ memiliki transformasi alih-alih peta dan remove_if alih-alih filter (membalikkan makna predikat). Lisp memiliki mapcar alih-alih peta , menghapus-jika-bukan sebagai pengganti filter , dan mengurangi alih-alih lipatan (Beberapa varian Lisp modern memiliki peta tetapi ini tampaknya merupakan bentuk turunan .) C # menggunakan Pilih sebagai ganti peta dan Di mana alih-alihfilter . Nama C # berasal dari SQL melalui LINQ , dan meskipun namanya berubah, fungsinya dipengaruhi oleh Haskell, yang dipengaruhi oleh ML.

Nama-nama peta , lipatan , dan filter tersebar luas, tetapi tidak universal. Ini menunjukkan bahwa mereka dipinjam dari sumber yang berpengaruh ke bahasa kontemporer lainnya. Dari mana nama-nama fungsi ini berasal?


10
mapakan datang dari teori himpunan matematika, yang menggambarkan transformasi set sebagai "pemetaan" dari domain input ke rentang output.
Aidan Cully

2
Lisp mapcaradalah peta, di mobil (bukan cdr).

lipatan mendapat namanya karena dalam teori himpunan itu disebut catamorphism tapi itu benar-benar konyol. Foldl juga adalah Agregat di LINQ, lagi dari terminologi SQL.
Jimmy Hoffa

2
Juga perhatikan bahwa sementara bahasa-bahasa itu tidak memiliki leluhur yang sama secara resmi, benar-benar ada banyak pengaruh, bolak-balik. Guido van Rossum telah melakukan pekerjaan rumahnya ketika ia mulai mendesain Python, dan Skema, Common Lisp, Perl dan (IIRC) Haskell dan ML sudah ada pada saat itu.
tdammers

1
filtertidak persis itu - itu menyaring data. Tampak cukup jelas.
Dukeling

Jawaban:


3

Satu-satunya kata universal dalam daftar Anda adalah mapdan sudah muncul di kertas asli tentang Lisp pada tahun 1960 (dengan kedok maplist). Makalah ini juga memiliki search(AKA filter, AKA remove-if-not).

Saya pikir alasan yang mapbertahan sementara yang lain memiliki varian adalah yang mapberasal dari matematika yang relatif kuno, mapan, umum & dasar sementara catamorphism(AKA reduceAKA fold& c) adalah konsep yang relatif maju, dari yang relatif baru dikembangkan (kurang lebih bersamaan dengan CS) domain , dan diperkenalkan (pada akhir 1980-an) ketika reducetersedia di Lisp selama lebih dari satu dekade .

Lainnya ( filterAKA remove-if-not) bahkan lebih ad hoc dalam CS / pemrograman, sehingga orang merasa lebih nyaman memilih nama mereka sendiri untuk mereka.


1
Jangan samar-samar menyebut teori Kategori sebagai "domain yang baru dikembangkan tidak jelas" juga tentang "dikembangkan baru-baru ini" seperti kalkulus Lambda .
Dan D.

@DanD .: kata kuncinya adalah relatif
sds

Bahkan kemudian, mereka semua mendapat bug di .NET sehingga mereka akan mirip dengan SQL. (peta -> Pilih; filter -> Di mana; lipat -> Agregat)
Steven Evers
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.