-- 両替問題(Count Change Problem)

type Amount = Integer
type Coin   = Integer
type Count  = Integer

-- 金額と貨幣(額面)のリストから，両替の場合の数へ

cc :: Amount -> [Coin] -> Count
cc 0 _  = 1                 -- 金額がちょうど0なら，両替は1通り
cc _ [] = 0                 -- 両替に使う貨幣がなければ，両替は0通り
cc a ccs@(c:cs)
 | a < 0     = 0            -- 金額が0より少なければ，両替は0通り
 | otherwise = cc (a-c) ccs -- 最初の種類の貨幣額面を引いた金額の両替の場合の数
             + cc a     cs  -- 最初の種類の貨幣以外を使う両替の場合の数


