local val addup = foldr (fn (a,b) => a+b) 0 in fun countchange nil 0 = 1 | countchange nil _ = 0 | countchange (c::cs) x = addup (map (fn n => countchange cs (x - n*c)) (iota (x div c))) end;