2
クラスについては、厳密でない関数の単純な例を考え出し、非厳密な関数が意味をなさないと主張していました。私の例の1つは、ドメイン内のすべてのxに対して0 * x = x * 0 = 0を定義することが有用かもしれないということでした。私が家に帰ったとき、私は自然にハスケルのクリエイターがそれについて何を考えているのか見たいと思っていました。ここに私の混乱が来る。一台のマシンでhaskellでの厳密なまたは非厳密な乗算?
、GHCiの乗算は、両方の引数に厳密であることを言う:別のマシンで
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 0 * undefined
*** Exception: Prelude.undefined
Prelude> undefined * 0
*** Exception: Prelude.undefined
、GHCiのは、乗算が最初の引数に非厳密であることを言う:
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Prelude> undefined * 0
0
Prelude> 0 * undefined
*** Exception: Prelude.undefined
何行動の違いを引き起こしますか?
[非自明レイジー評価](http://stackoverflow.com/questions/7868507例えば: /非自明 - 遅延評価)。 –
これは、[GHC 7.10.3のバグ](http://stackoverflow.com/questions/36049689/why-does-multiplication-only-short-circuit-on-one-side)の結果です。 7.10より前に存在し、8.1で削除されました。 –
OK。ありがとう。乗算を厳密にするという決定の背後にある理由は何ですか?私の見解では、これは明らかではありません。なぜなら、私は真実と平行しているからです。 undefined = True。 – stefk0