2014-04-11 6 views
0

다음 절차와 같은 currying 방법을 작성해야합니다.Function currying - Scheme

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

인가? 어떻게 이것이 currying인지 설명 할 수 있습니까?

+0

원래 함수는 이미 currying 중입니다. 나는 당신의 버전이 다르게 해야하는지 모르겠습니다. –

+0

첫 번째 버전은 currying이지만 두 번째 솔루션보다 (fact n) 더 많은 시간을 계산하는 순수한 버전입니다. 우리는 부분적인 평가 목표를 달성 할 것으로 예상했습니다. (uni '과정의 일부로) – roh

+0

누군가가 도와 줄 수 있습니까? – roh

답변

1

네, 맞습니다. "이항 계수 함수는 n과 k라는 두 개의 인수를 취하고 계수를 계산하는 r의 함수를 반환하는 카레 함수를 생성했습니다 .r의 함수는 n 어휘 적으로 묶여있다. "