こんなのが与えられてて、たとえば10円の出し方が何通りあるかを計算できる。
(define (cc amount coin-values) (cond ((= amount 0) 1) ((or (< amount 0) (no-more? coin-values)) 0) (else (+ (cc amount (except-first-denomination coin-values)) (cc (- amount (first-denomination coin-values)) coin-values)))))
こんな風に。
gosh> (cc 10 (list 500 100 50 10 5 1)) 4
- 10円玉1枚
- 5円玉2枚
- 5円玉1枚,1円玉5枚
- 1円玉10枚
で4通り。
それ実現するためにどうすれば良いのかなぁみたいなことなんですが、そのまんまぽい。
(define (first-denomination l) (car l)) (define (except-first-denomination l) (cdr l)) (define no-more? null?)