Haskell: faule gegen eifrige Bewertung für die Einfügesortierung

8

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

%Vor%

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

    
Mark 21.05.2012, 08:03
quelle

1 Antwort

10

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

angeben %Vor%

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.

    
Chris Taylor 21.05.2012, 08:25
quelle

Tags und Links