函数currying - Scheme

时间:2014-04-11 09:38:01

标签: scheme factorial currying

我们需要编写一个与下面的过程相同的currying方法。

; 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)))))))

我的解决方案:

(define c-bc
  (lambda (n)
    (let ((fact-n (fact n)))
      (lambda (k)
        (/ fact-n (* (fact k) (fact (- n k))))))))

是不是?我怎么能解释这是在讨论呢?

1 个答案:

答案 0 :(得分:1)

是的,这是对的。将其解释为:"二项式系数函数采用两个参数n和k。我已经产生了一个cur函数,它返回了一个r函数来计算系数。 r的功能是优化的'因为只涉及n的计算是词法上绑定的。"