両替問題(末尾再帰版)
硬貨の種類を順に増やすというボトムアップを行うシンプルなもの.
module CountChange where type Amount = Int type Coins = [Int] jpy :: Coins jpy = [1,5,10,50,100,500,1000,2000,5000,10000] cc :: Coins -> Amount -> Integer cc cs a = foldl f (1:repeat 0) cs !! a where f xs n = exs where exs = hxs ++ zipWith (+) txs exs (hxs,txs) = splitAt n xs