2015-01-07 6 views
5

Wir sagen, dass eine Funktion in ihrem Argument streng ist, aber wie sagt man, dass eine Funktion in ihrer Argumentation nicht streng ist? Können wir sagen, dass eine Funktion nicht strikt ist, wennWie sagen wir formal, dass eine Funktion in einem Argument nicht strikt ist? wenn</p> <pre><code>f ⊥ = ⊥ </code></pre> <p>

f ⊥ ≠ ⊥ 

?

Wie erstreckt sich das auf Funktionen vieler Argumente, bei denen wir ein Argument abhängig vom Wert eines anderen Arguments bewerten oder nicht?

Ich frage dies im Zusammenhang mit der Dokumentation der Striktheitseigenschaften von Haskell-Funktionen mit Haddock-Dokumentation.

+3

Sie haben Recht, eine Funktion ist nicht streng, wenn f ⊥ ≠ ⊥. Wenn Sie ein Argument in Abhängigkeit von nicht bewerten, ist die Funktion nicht strikt (in dem Argument, das möglicherweise nicht ausgewertet wird). – BadZen

+2

Wenn eine Funktion * always * ihr Argument auswertet, wird sie in diesem Argument als strict bezeichnet. Eine Funktion, die * nie * ein Argument auswertet, wird in diesem Argument uninteressant genannt. OK, OK, ich habe es gerade erfunden. Aber dieses triviale Verhalten zu studieren scheint keine sehr aufregende Wissenschaft zu sein. Eine Funktion, die ihr Argument * nicht immer * auswertet, wird in diesem Argument als nicht-streng bezeichnet. –

+2

@ n.m. Eine Funktion kann ihr Argument vollständig ignorieren und in diesem Argument immer noch streng sein. – augustss

Antwort

12

Es gibt keine Standardnotation, um komplexe Striktheitseigenschaften auszudrücken. Es ist auch nicht so einfach wie nur strikt zu sein, da für Datenstrukturen müssen Sie genau sagen, wie viel wird ausgewertet.

Das heißt, für eine einfache Funktion wie

cond c t e = if c then t else e 

Sie sagen sich vorstellen können, dass die Strikt 1 & (2 | 3) ist, was bedeutet, dass es das erste Argument zu bewerten, und entweder die zweite oder die dritte. Dies sind die strengen Eigenschaften, die ein einfacher Striktheitsanalysator bieten wird. (Und einfache scheinen die einzigen zu sein, die es wert sind.)