http://projecteuler.net/index.php?section=problems&id=101

少し頭を使った。

ただの階差数列は1次の多項式

2階の階差数列は2次の多項式

3階の階差数列は3次の多項式

n階の階差数列はn次の多項式

なので

階差の山を作って

各高さの右端の数字を全部足すイメージ

gen = foldr f 1 .replicate 10
where f x y = 1 - x*y
diff xs = zipWith (-) (tail xs) $ xs
bOP g n = sum.map last.take n.iterate diff.take n.map g $ [1..]
main = print.sum.map (bOP gen)$[1..10]