10より小さい自然数で3または5の倍数である ものを全て列挙すると3,5,6,9である。またその和は23になる。
1000より小さい全ての3または5の倍数の和を求めよ。
まずは小手調べ的な問題。FizzBuzzと言われているものの派生といった感じか。 こういう問題をHaskellなら直感的にそのままプログラムにできる。まずリスト の内包表記という便利なものがあって、以下のように、|の後ろの条件を満たす 要素n全てという風にリストが定義できる。これで問題文の1000より小さい3ま たは5の倍数というのをそのまま書くと、nは1から999までの数で、n を3で割っ たあまりが0もしくは5で割ったあまりが0の数でできたリストが生成される。
sumという関数はリストのすべての要素の和を求めるのでこれで問題の解答が得 られるというわけだ。modは余りを求める関数であるが`mod`のようにバックク オートでくくることで演算子のように用いることができる。
euler001 = sum [n | n <- [1..999], n `mod` 3 == 0 || n `mod` 5 == 0]
