両替
2007/07/14
気力の持つ間はたらたら進めます。
両替の関数を作ろうとしていますが、結構面倒でした。
両替の元の硬貨と財布を引数として受けとり、両替した硬貨と両替後の財布を返す関数にしました。
(exchange 100 '((10 . 14) (1 . 16))) => (10 . 10), ((10 . 4) (1 .16))
未完成版です
(defun exchange (coin wallet) (if (eql coin 1) (values nil wallet) (progn (loop for unit in (reverse *coins*) do (if (<= coin (* (count-coins unit wallet) unit)) (return (values (cons unit (/ coin unit)) (pickup-coins unit (/ coin unit) wallet))))))))
10円玉を、5円玉1枚と1円玉5枚というような両替を考えないと簡単なんですが。。
100円玉を、50円玉1枚と10円玉4枚と5円玉1枚と1円玉5枚と両替というのもありえるし。
たくさん場合分けすれば書けるけど、変にこだわってしまう。