こうゆう問題を考えて見ましょう。 数字の入ったリストがある。そのリストの各要素をそのリストの最小値で引いた値を返す関数decWithMinを書け。つまり、 decWithMin [5, 10, 20, 4, 3, 100] => [2, 7, 17, 1, 0, 97] そんなの簡単じゃんと: decWithMin ls = map (\x -> x - min) ls where min = minimum ls なんてやるわけなんですが、なんとこのコードには重大な欠陥が!...と大げさになるほどのことでもないのですが、要はこのコードはリストlsを2回トラバースしているわけですね...一回目はminimum ls、もう一回はmapで。でも、もうちょっと広いスコープで見ると、ちょっと面白いことに気づきます。 もしdecWithMinの実行結果を誰も見ないとしたら、HaskellはLazyな