函数currying-Scheme

函数currying-Scheme,scheme,factorial,currying,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,

我们需要编写一个与下面的过程相同的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))))))))

是这样吗?我怎样才能解释这是咖喱呢?

是的,这是正确的。解释为:“二项式系数函数有两个参数,n和k。我生成了一个n的curried函数,返回一个计算系数的r函数。r的函数是‘优化’的,因为只涉及n的计算在词汇上是有界的。”

原始函数已经在curried中了。我不确定你的版本应该有什么不同。第一个版本很流行,但是一个幼稚的版本比第二个解决方案计算(事实n)的次数要多。我们希望实现部分评估目标。(作为大学课程的一部分。)