宿題検討
たとえば amount が 16 だと filter はそれと = か、という事で良いのか。とりあえず、両替対象な coin の候補なリストを作る手続きはでっち上がってます。
;; (make-list 16 '(50 25 10 5 1)) -> '(10 5 1) (define (make-list n l) (cond ((null? l) '()) ((> n (car l)) l) (else (make-list n (cdr l)))))
戻されるリストを元にどうするか。数え上げは「より大きく」なったら終り、という事にする方向。car とリスト全体を渡す形?
駄目だ。疲労困憊杉。試行錯誤中のナニが以下。
gosh> (define (xx n l1 l2) (if (null? l2) '() (let ((l3 (append l1 (list (car l2))))) (if (< n (apply + (append l1 (list (car l2))))) (xx n l1 (cdr l2)) (cons l3 (xx n l3 l2)))))) xx gosh> (xx 16 '(10) '(10 5 1)) ((10 5) (10 5 1)) gosh> (xx 16 '(5) '(5 1)) ((5 5) (5 5 5) (5 5 5 1)) gosh> (xx 24 '(10) '(10 5 1)) ((10 10) (10 10 1) (10 10 1 1) (10 10 1 1 1) (10 10 1 1 1 1)) gosh> (xx 24 '(5) '(5 1)) ((5 5) (5 5 5) (5 5 5 5) (5 5 5 5 1) (5 5 5 5 1 1) (5 5 5 5 1 1 1) (5 5 5 5 1 1 1 1)) gosh> (xx 24 '(1) '(1)) ((1 1) (1 1 1) (1 1 1 1) (1 1 1 1 1) (1 1 1 1 1 1) (1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) gosh>
時計みたら次の日だし。しかも上記は数え上げれてないし。
((10 5) (10 5 1))
よく見たら
((10 1) (10 1 1) (10 1 1 1) (10 1 1 1 1) (10 1 1 1 1 1) (10 1 1 1 1 1 1))
という数え上げが足りてない。とりあえず今日は駄目ッス。