次の関数を定義しています。
ex 1 x = 1
ex 0 x = 0
ex b x = b ** x
次に、次を実行すると:
1 `ex` (sum [1..])
遅延して 1 を返すのではなく、無限数列の合計を計算しようとします。なぜですか?
編集: さらに調査したところex
、ファイルで関数を定義すると遅延が発生することがわかりましたが、GHCI で定義した場合は発生しません。
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let ex 1 x = 1
Prelude> let ex b x = b ** x
Prelude> ex 1 (sum [1..])
<interactive>: out of memory (requested 1048576 bytes)
ex
定義をファイル (この場合は test.hs)にプルすると、次のようになります。
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> :load test.hs
[1 of 1] Compiling Main ( test.hs, interpreted )
Ok, modules loaded: Main.
*Main> ex 1 (sum [1..])
1.0
では、新しい質問は、なぜですか?