2013-03-21 10 views
5

誤って私の投稿を削除しましたが、この質問を明確にするために再掲載しています。私が機能している場合怠惰な評価を確認する

は:
const x = 1

を私はHaskellの尋ねる場合:
const (1/0)

を遅延評価は、実際に1/0が何であるかを計算しないので、それは右、1を返すのだろうか?それは必要ではありません。

+2

ええ、これはHaskellの非厳密な意味保証です。 –

+10

'1/0'は実際に例外をスローしません。特別な' Double'値を返します。しかし、例外を投げたもの(例えば 'error" die "')に変更すると、答えは '1'になります。 – MathematicalOrchid

+2

もちろん、 'const'はこれの悪い名前です - あなたは' const1'と呼ぶことができ、実際には 'const1 = const 1'と定義することができます。ほとんどのPrelude関数のように、 'const'という名前は他には使用しないでください。 – leftaroundabout

答えて

8

はい、そうです。 constは、定義したように、引数が何であっても、評価されると常に1を生成します。引数は結果には関係しないため、評価されません。したがって、引数の評価によって引き起こされる可能性のあるエラーまたは非終了は発生しません。

関連する問題