宿題検討

たとえば 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))

という数え上げが足りてない。とりあえず今日は駄目ッス。