問題 2.19

(define us-coins (list 50 25 10 5 1))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))

(define (cc amount coin-values)
  (define (no-more? cv) (null? cv))
  (define (first-denomination cv) (car cv))
  (define (except-first-denomination cv) (cdr cv))
  (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)))))


;(cc 100 us-coins)
;-> 292
;(cc 100 uk-coins)
;-> 104561

;ならび順を変えても、影響はないだろうと思う。
;場合の数なので、順不同でも大丈夫だと思う。
; 25 25 50でも、25 50 25でも、 50 25 25でも、おなじ1通り。

;(define us-coins (list 25 1 10 5 50))
;(cc 100 us-coins)
;-> 292

;ok
;何だこの簡単な問題…。