ฉันได้อ่านบทความเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นทุกวันและพยายามที่จะใช้แนวทางปฏิบัติบางอย่างให้มากที่สุด แต่ฉันไม่เข้าใจสิ่งที่เป็นเอกลักษณ์ในการประยุกต์ใช้การ 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คือการแสดงออกที่จะป้อนพารามิเตอร์และไม่ได้รับการประเมินโดยการลด