前回は foldl と foldr の概要を見ました。 今回はこの二つの高階関数の違いを見ていきましょう。 ではなぜ and が foldr の方を使っているのか and [False,x2,x3,x4] の計算を例に見ていきましょう。 (False が入っているので論理積の結果が False になることは人間の目には明らかです) and の定義は and = foldr (&&) True でしたので and [False,x2,x3,x4] の値は False && (x4 && (x2 && (x3 && True))) と表せます。Haskell は外側から具体的な値が必要になる順に計算していきます。 (&&) の定義は True && x = x False && _ = False でしたから False && _ = False の方の処理が適用され (x4 && (x2 &