;;; no curry ;;; (Int, Int, Int) => Int (define sum (lambda (xyz) (+ xyz) ) ) (sum 1 2 3) ;;; curry once ;;; (Int) => ((Int x Int) => Int) (define sum (lambda (x) (lambda (yz) (+ xyz) ) ) ) (define sum+10 (sum 10)) (sum+10 10 20) ;;; curry 2 times ;;; (Int) => (Int => (Int => Int) ) (define sum (lambda (x) (lambda (y) (lambda (z) (+ xyz) ) ) ) ) (define sum+10+20 ((sum 10) 20)) (sum+10+20 30)
;;; Now we summarize, based on these examples:
(define (curry nf) (if (= n 0) (lambda (x) x) (lambda (x) (f ((curry (- n 1) f) x)))))
;;; Example: apply function 1+ 11 times to the initial number 10, results 21:
((curry 11 (lambda (x) (+ x 1))) 10)
source share