2013-10-06 3 views
0

나는 명칭 목록과 금액을 고려하여 계획을 변경하는 방법의 수를 세는 함수를 작성 중이다. 내 코드는 다음과 같습니다. 그러나 의도 한대로 작동하지 않습니다. + 연산자 대신 단점을 사용해야합니까? 세 번째 줄의 기본 경우는 빈 목록이어야합니까?명칭 목록을 사용하여 체계의 변화 계산하기

(define (change k l) 
(cond ((= k 0) 1) 
    ((or (< k 0) (null? l)) 0) 
    (else (+ (change k (cdr l)) 
       (change (- k (car l)) 
         (cdr l)))))) 

테스트 : 반환 값은 단지 경우

(change 11 (list 1 5 10 25)) 

답변

2

는 다음 출력 구축에 대한 cons'()을 잊지 만을 처리 car, cdr, null?를 사용 입력. 이 같은 기대 작품 이제

(define (change k l) 
    (cond ((= k 0) 1) 
     ((or (< k 0) (null? l)) 0) 
     (else 
     (+ (change k (cdr l)) 
      (change (- k (car l)) l))))) ; don't do (cdr l) here 

:

(change 11 (list 1 5 10 25)) 
=> 4 
그 외에는, 코드의 마지막 줄에있는 작은 실수가 있음을 알고, 여기에 고정 된 버전입니다