2013-03-21 9 views
5

Ich habe versehentlich meinen Beitrag gelöscht, aber ich wiederhole diese Frage zur Klarstellung.Bestätigung der faulen Bewertung

Wenn ich eine Funktion:
const x = 1

Wenn ich frage Haskell:
const (1/0)

Es wird 1 zurück, weil lazy evaluation eigentlich nicht berechnen, was 1/0 ist, nicht wahr? Es muss nicht.

+2

Ja, das ist, was Haskell nicht-semantische Garantien garantiert. –

+10

Beachten Sie, dass "1/0" keine Ausnahme auslöst - es gibt nur einen speziellen "Double" -Wert zurück. Aber wenn Sie es in etwas ändern, das eine Ausnahme auslöst (z. B. "Fehler" stirbt "), erhalten Sie immer noch" 1 "als Antwort. – MathematicalOrchid

+2

Natürlich ist "const" ein schlechter Name dafür - man könnte es "const1" nennen, und es könnte tatsächlich als const1 = const 1 definiert werden. Der Name 'const' sollte, wie die meisten Prelude-Funktionen, für nichts anderes verwendet werden. – leftaroundabout

Antwort

8

Ja, das stimmt. const, wie Sie es definiert haben, wird immer 1 ergeben, wenn es ausgewertet wird - egal, was das Argument ist. Und da das Argument für das Ergebnis nicht relevant ist, wird es nicht ausgewertet. Somit wird kein Fehler oder keine Beendigung auftreten, der durch die Auswertung des Arguments verursacht werden könnte.

Verwandte Themen