We need to write a currying method that does the same like the procedure below.
; Signature: c-bc(n)
; Type: [Number -> [Number -> Number]]
; Purpose: A naive Currying for binomial coefficient (n, k).
; Pre-conditions: n is a natural number
; Tests: ((c-bc 5) 3) => 10, ((c-bc 6) 2) => 15,
; ((c-bc 0) 0) => 1
(define c-bc
(lambda (n)
(lambda (k)
(/ (fact n)
(* (fact k)
(fact (- n k)))))))
My solution:
(define c-bc
(lambda (n)
(let ((fact-n (fact n)))
(lambda (k)
(/ fact-n (* (fact k) (fact (- n k))))))))
Is it right? And how can I explain that this is currying?