Ich stehe derzeit auf einer Frage von IFPH Kapitel 7.
Es ist Übung 7.1.2 , die lautet:
"Eine Definition von sort
ist sort = foldr insert []
wo
Geben Sie im Detail die eifrigen und faulen Evaluationsreduktionssequenzen für den Ausdruck sort [3,4,2,1]
an und erklären Sie, wo sie sich unterscheiden "
Nun begann ich zuerst mit der eifrigen Evaluationsreduktionssequenz, von der ich annehme, dass sie innerste Reduktion ist.
Für mich ergibt das ...
%Vor%Welche ist die sortierte Liste?
Jetzt für die faule Auswertung ist die einzige Verkleinerungssequenz, die ich mir vorstellen kann, genau dieselbe wie für die eifrige Bewertung. Sicher, Haskell macht die äußerste äußerste Bewertung für eine faule Auswertung: aber ich denke nicht, dass sie auf dem größten Teil der Liste operieren kann, bis die inneren Berechnungen abgeschlossen sind.
Stimmt diese Argumentation? Intuition sagt mir nein.
Wenn jemand darauf hinweisen könnte, wie man die faule Bewertungsreduktions-Sequenz durchführt, wäre das großartig.
Danke
In der Zeile mit
%Vor% Sie haben genug von dem zweiten Argument für das äußere insert
berechnet, dass Sie die Berechnung ausführen können, indem Sie die nächste Zeile
und Sie können jetzt die if-Anweisung ausführen und die nächste Berechnung als
angeben %Vor%Anstatt, was Sie mit eifriger Bewertung haben:
%Vor% Wenn Sie eine faule Auswertung verwenden, berechnen Sie, dass das erste Element des Ergebnisses 1
ist, bevor Sie den Rest der Liste sortieren - Kontrast mit eifriger Auswertung, die fast das gesamte Ende der Liste sortiert, bevor sie den ersten findet Element ist.
Tags und Links haskell