ฉันได้อ่านบทความเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นทุกวันและพยายามที่จะใช้แนวทางปฏิบัติบางอย่างให้มากที่สุด แต่ฉันไม่เข้าใจสิ่งที่เป็นเอกลักษณ์ในการประยุกต์ใช้การ 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. )
ฉันทำอะไรบางอย่างหายไปหรือเปล่า มีสถานที่ที่ฉันสามารถใช้แอปพลิเคชั่นการแกงและบางส่วนในแอปพลิเคชัน Grails ของฉัน แต่ฉันลังเลที่จะทำเช่นนั้นเพราะฉันถามตัวเองว่า "มันแตกต่างกันอย่างไร"
โปรดให้ความกระจ่างแก่ฉัน
แก้ไข: คุณกำลังบอกว่าแอปพลิเคชั่น / การแกงบางส่วนนั้นมีประสิทธิภาพมากกว่าการสร้าง / เรียกใช้ฟังก์ชันอื่นที่ส่งต่อพารามิเตอร์เริ่มต้นไปยังฟังก์ชันดั้งเดิมหรือไม่
f x y = x + y
หมายความว่าf
เป็นฟังก์ชั่นที่รับพารามิเตอร์ int หนึ่งตัว ผลลัพธ์ของf x
( f
ใช้กับx
) เป็นฟังก์ชันที่รับพารามิเตอร์ int หนึ่งตัว ผลที่ตามมาf x y
(หรือ(f x) y
คือf x
นำไปใช้y
) x + y
คือการแสดงออกที่จะป้อนพารามิเตอร์และไม่ได้รับการประเมินโดยการลด