Wie unterscheidet sich Haskells 'seq' von anderen Funktionen?
Ich bin verwirrt über die Beschreibung, wie Haskellsseq
arbeitet in einem Tutorial lese ich.
Das Tutorial besagt, dass
Auswertung des Ausdrucksseq x y
wertet zuerst @ ax
zu WHNF und erst dann mit der Auswertung von @ fortfahry
Bei der Erklärung, wie Haskells Lazy Evaluation im Allgemeinen funktioniert, heißt es in demselben Tutorial, dass bei der Evaluierung einer Funktion Argumente "evaluiert werden, aber nur so weit wie nötig", was bedeutet, dass ihre
arguments werden von links nach rechts ausgewertet, bis ihre obersten Knoten Konstruktoren sind, die mit dem Muster übereinstimmen. Wenn das Muster eine einfache Variable ist, wird das Argument nicht ausgewertet. Wenn das Muster ein Konstruktor ist, bedeutet dies eine Auswertung nach WHNF.
Diese Beschreibung der Funktionsbewertung im Allgemeinen scheint sich nicht von der Beschreibung für @ zu unterscheideseq
. Beide - in meiner Anfängerlesung - reduzieren nur ihr erstes Argument auf WHNF.
Ist das korrekt? Wie istseq
unterscheidet sich - insbesondere in der Art und Weise, wie es sein erstes Argument verarbeitet - von jeder anderen Haskell-Funktion?