Tôi đã đọc các bài viết về lập trình chức năng hàng ngày và đang cố gắng áp dụng một số thực tiễn càng nhiều càng tốt. Nhưng tôi không hiểu những gì là duy nhất trong cà ri hoặc ứng dụng một phần.
Lấy mã Groovy này làm ví dụ:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Tôi không hiểu sự khác biệt giữa tripler1
và tripler2
. Cả hai không giống nhau sao? 'Cà ri' được hỗ trợ bằng các ngôn ngữ chức năng thuần túy hoặc một phần như Groovy, Scala, Haskell, v.v. hàm hoặc đóng sẽ chuyển tiếp các tham số đến hàm ban đầu (như tripler2
) trong hầu hết các ngôn ngữ (thậm chí C.)
Am i thiếu cái gì ở đây? Có những nơi tôi có thể sử dụng ứng dụng currying và một phần trong ứng dụng Grails của mình nhưng tôi ngần ngại làm điều đó bởi vì tôi đang tự hỏi mình "Nó khác nhau như thế nào?"
Vui lòng làm sáng tỏ cho tôi.
EDIT: Các bạn có nói rằng ứng dụng / currying một phần đơn giản là hiệu quả hơn so với việc tạo / gọi một hàm khác chuyển các tham số mặc định thành hàm gốc?
f x y = x + y
có nghĩa f
là một hàm lấy một tham số int. Kết quả của f x
( f
áp dụng cho x
) là một hàm có một tham số int. Kết quả f x y
(hoặc (f x) y
, tức là f x
được áp dụng cho y
) là một biểu thức không có tham số đầu vào và được đánh giá bằng cách giảm x + y
.