คำถามติดแท็ก higher-order-functions

1
การส่งผ่านฟังก์ชัน Scala ไปยังวิธีการ Java 8
โค้ด Scala ต่อไปนี้ใช้งานได้และสามารถส่งผ่านไปยังเมธอด Java ที่ต้องการฟังก์ชัน มีวิธีที่สะอาดกว่านี้หรือไม่? นี่คือการผ่านครั้งแรกของฉัน: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } นี่คือรอบที่สองของฉัน - มันใช้ wrapper ทั่วไปสำหรับส่วนต่อประสานฟังก์ชั่น …

3
หลักการตั้งชื่อสำหรับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว มีแบบแผนการตั้งชื่อสำหรับฟังก์ชันคำสั่งซื้อที่สูงขึ้นหรือไม่? นั่นคือฟังก์ชันที่ส่งคืนฟังก์ชันอื่น ตัวอย่างใน Javascript: function onlyDivisibleBy(div) { // <-- higher order function return function (n) { return n % div === 0; } } var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9] …

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

2
ใครเป็นคนแรกที่ประกาศเกียรติคุณฟังก์ชันคำสั่งซื้อที่สูงขึ้นและ / หรือพลเมืองชั้นหนึ่ง?
ฉันเข้าใจมานานแล้วว่าก่อนที่ Haskell, O'Caml หรือ LISP หน้าที่การสั่งงานที่สูงขึ้นจะเป็นวิชาวิจัยทางวิชาการและในวิชาคณิตศาสตร์Schönfinkel (ในปี 1967) และ Haskell Curry (ในปี 1968) ได้ใช้เทคนิคเช่น currying แต่ ก่อนหน้านี้มีให้ในภาษาการเขียนโปรแกรมใด ๆ Scheme ตาม Wikipediaเป็นภาษาแรกที่แนะนำฟังก์ชั่นการสั่งซื้อที่สูงขึ้นอย่างเหมาะสมในฐานะพลเมืองชั้นหนึ่ง แต่มีใครบ้างที่เราสามารถให้ความคิดดั้งเดิมได้ บางทีโบสถ์อลองโซผู้คิดค้นแลมบ์ดาแคลคูลัสในทศวรรษ 1930? โดยเฉพาะอย่างยิ่งใครเป็นผู้นิยามคำนิยามต่อไปนี้ซึ่งฉันเห็นในการถอดความหลายเรื่องในหนังสือหลายเล่มและแหล่งข้อมูลออนไลน์ ฟังก์ชั่นจะถือว่าเป็นลำดับที่สูงขึ้นเมื่อใช้ฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือเมื่อส่งคืนฟังก์ชัน ฟังก์ชันใด ๆ ที่ไม่รับฟังก์ชั่นเป็นอาร์กิวเมนต์หรือเป็นชนิดส่งคืนจะเรียกว่าฟังก์ชันลำดับแรก

4
มีอะไรพิเศษเกี่ยวกับการแกงหรือการใช้งานบางส่วน
ฉันได้อ่านบทความเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นทุกวันและพยายามที่จะใช้แนวทางปฏิบัติบางอย่างให้มากที่สุด แต่ฉันไม่เข้าใจสิ่งที่เป็นเอกลักษณ์ในการประยุกต์ใช้การ currying หรือบางส่วน ใช้โค้ด Groovy นี้เป็นตัวอย่าง: def mul = { a, b -> a * b } def tripler1 = mul.curry(3) def tripler2 = { mul(3, it) } ฉันไม่เข้าใจความแตกต่างระหว่างtripler1และtripler2คืออะไร พวกเขาทั้งคู่ไม่เหมือนกันหรือ 'การแกง' ได้รับการสนับสนุนในภาษาที่ใช้งานได้จริงหรือบางส่วนเช่น Groovy, Scala, Haskell เป็นต้น แต่ฉันสามารถทำสิ่งเดียวกันได้ (แกงเผ็ดซ้าย, แกงกะหรี่ขวา, แกงกะหรี่หรือแอปพลิเคชั่นบางส่วน) เพียงแค่สร้างชื่อหรือไม่ระบุชื่อ ฟังก์ชั่นหรือการปิดที่จะส่งต่อพารามิเตอร์ไปยังฟังก์ชั่นเดิม (เช่นtripler2) ในภาษาส่วนใหญ่ (แม้ C. ) ฉันทำอะไรบางอย่างหายไปหรือเปล่า มีสถานที่ที่ฉันสามารถใช้แอปพลิเคชั่นการแกงและบางส่วนในแอปพลิเคชัน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.