ต้นกำเนิดของชื่อฟังก์ชันการประมวลผลรายการทั่วไป


11

ฟังก์ชันลำดับสูงกว่าสำหรับการใช้งานในรายการหรืออาร์เรย์ได้ถูกนำมาใช้ซ้ำแล้วซ้ำอีก ฟังก์ชั่นแผนที่ , พับ [ L | r ] และตัวกรองถูกพบร่วมกันในภาษาการเขียนโปรแกรมหลายภาษาเช่น Scheme, ML และ Python ที่ดูเหมือนจะไม่มีบรรพบุรุษเดียวกัน ฉันจะใช้ชื่อทั้งสามนี้เพื่อรักษาคำถาม

เพื่อแสดงว่าชื่อไม่เป็นสากลต่อไปนี้เป็นตัวอย่างของชื่อฟังก์ชันการทำงานที่เทียบเท่าในภาษาอื่น C ++ มีการแปลงแทนmapและremove_ifแทนที่จะเป็นfilter (กลับความหมายของเพรดิเคต) ชัดมีmapcarแทนแผนที่ , ลบถ้าไม่แทนการกรองและลดแทนการพับ (บางทันสมัยเสียงกระเพื่อมสายพันธุ์มีแผนที่แต่ปรากฏนี้จะเป็นรูปแบบที่ได้มา .) C # ใช้เลือกแทนการแผนที่และไหนแทนกรอง ชื่อของ C # มาจาก SQL ผ่านLINQและแม้ว่าจะมีการเปลี่ยนแปลงชื่อการทำงานของพวกเขานั้นได้รับอิทธิพลจาก Haskell ซึ่งตัวมันเองได้รับอิทธิพลมาจาก ML

ชื่อแผนที่ , พับและตัวกรองเป็นที่แพร่หลาย แต่ไม่เป็นสากล นี่แสดงให้เห็นว่าพวกเขายืมมาจากแหล่งที่มีอิทธิพลไปสู่ภาษาร่วมสมัยอื่น ๆ ชื่อฟังก์ชันเหล่านี้มาจากไหน


10
mapจะมาจากทฤษฎีเซตคณิตศาสตร์ซึ่งอธิบายการแปลงชุดเป็น "การแมป" จากโดเมนอินพุตไปยังช่วงเอาต์พุต
Aidan Cully

2
Lisp's mapcarเป็นแผนที่บนรถ (แทนที่จะเป็น cdr)

พับได้มันเป็นชื่อเพราะในทฤษฎีเซตเรียกว่า catamorphism แต่มันไร้สาระจริงๆ นอกจากนี้ foldl คือรวมใน LINQ อีกครั้งจากคำศัพท์ SQL
จิมมี่ฮอฟฟา

2
โปรดทราบว่าแม้ว่าภาษาเหล่านั้นจะไม่มีบรรพบุรุษร่วมกันอย่างเป็นทางการ แต่ก็มีอิทธิพลอย่างมากกลับไปกลับมา Guido van Rossum ทำการบ้านของเขาเมื่อเขาเริ่มออกแบบ Python และ Scheme, Common Lisp, Perl และ (IIRC) Haskell และ ML ได้เริ่มขึ้นแล้ว
tdammers

1
filterทำอย่างนั้น - มันกรองข้อมูล ดูเหมือนจะค่อนข้างชัดเจน
Dukeling

คำตอบ:


3

คำสากลเพียงคำเดียวในรายการของคุณคือmapและปรากฏในกระดาษต้นฉบับบน Lispในปี 1960 (ภายใต้หน้ากากของmaplist) กระดาษยังมีsearch(AKA filter, AKA remove-if-not)

ผมคิดว่าเหตุผลที่mapทนในขณะที่คนอื่น ๆ มีสายพันธุ์คือว่าmapมาจากการที่ค่อนข้างโบราณก่อตั้งขึ้นร่วมกันและคณิตศาสตร์ระดับประถมศึกษาในขณะที่catamorphism(AKA reduceAKA fold& C) เป็นที่ค่อนข้างแนวคิดขั้นสูงจากค่อนข้างคลุมเครือพัฒนาเมื่อเร็ว ๆ (มากหรือน้อยพร้อมกับ CS) โดเมนและมันได้รับการแนะนำ (ในช่วงปลายปี 1980 IES) เมื่อ reduceมีอยู่ในเสียงกระเพื่อมมานานกว่าทศวรรษ

อื่น ๆ ( filterAKA remove-if-not) มีความเฉพาะกิจมากขึ้นใน CS / การเขียนโปรแกรมดังนั้นผู้คนจึงรู้สึกสะดวกสบายยิ่งขึ้นในการเลือกชื่อของพวกเขาเอง


1
อย่ารางอ้างถึงทฤษฎีหมวดหมู่เป็น "ปิดบังโดเมนพัฒนาเมื่อเร็ว ๆ นี้" ก็มันเป็นเรื่องเกี่ยวกับ "การพัฒนาเมื่อเร็ว ๆ นี้" เป็นแลมบ์ดาแคลคูลัส
Dan D.

@DanD: คำสำคัญคือค่อนข้าง
sds

ถึงกระนั้นก็ตามพวกเขาทั้งหมดถูกบั๊กใน. NET เพื่อให้คล้ายกับ SQL (แผนที่ -> เลือก; ตัวกรอง -> ที่ไหน; พับ -> รวม)
Steven Evers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.