Lazy Evaluation

Lazy Evaluation

Lazy Evaluation ist eine Technologie in der Informatik, bei der das Ergebnis eines Ausdrucks nur so weit berechnet wird, wie es gerade benötigt wird.

Ein Vorteil einer solchen Auswertungsstrategie ist Zeitersparnis, da Funktionsaufrufe ganz vermieden oder zumindest teilweise eingespart werden können. Außerdem gibt Lazy Evaluation dem Programmierer die Möglichkeit, unendliche Datenstrukturen zu verwenden. Ein Nachteil ist die erschwerte Fehlerbereinigung in Programmen, die lazy evaluiert werden. Oft ist nicht auf den ersten Blick nachvollziehbar, ob ein Ausdruck zu einem bestimmten Zeitpunkt bereits ausgewertet wurde. Dies ist insbesondere dann problematisch, wenn Funktionsaufrufe eine Nebenwirkung haben können.

Ein auf logische Ausdrücke eingeschränkter Spezialfall ist die Kurzschlussauswertung, die auch in vielen nicht-lazy-Sprachen wie C oder Java implementiert ist.

Beispiel

Das folgende in Haskell geschriebene Beispiel zeigt eine Anwendung von Lazy Evaluation.

   squares n = (n*n) : squares (n+1)

Die Funktion squares berechnet die unendliche Liste aller Quadratzahlen beginnend bei n. Das Quadrat von 3 ließe sich also durch den Ausdruck   squares 0 !! 3   berechnen – dabei holt   l !! x   das Element an der Position x aus der Liste l. Ohne Lazy Evaluation würde der Aufruf von squares 0 nicht terminieren. Stattdessen werden nur die Teile berechnet, die wirklich benötigt werden. Die interne Auswertung sieht verkürzt wie folgt aus:

squares 0 !! 3
0*0 : squares (0+1) !! 3
squares (0+1) !! 2
(0+1)*(0+1) : squares (0+1+1) !! 2

(0+1+1+1)*(0+1+1+1) : squares (0+1+1+1+1) !! 0
(0+1+1+1)*(0+1+1+1)
9

Auf den ersten Blick scheint die Lazy Evaluation hier Berechnungen mehrfach auszuführen, da auf der rechten Seite der Funktion squares der Parameter n mehrfach verwendet wird und statt einem Wert eine nicht ausgeführte Berechnung eingesetzt wird. Da Haskell eine rein funktionale Sprache ist, gewährleistet die referentielle Transparenz, dass ein Ausdruck immer das gleiche Ergebnis hat. Somit muss jeder Ausdruck auch nur einmal ausgerechnet werden. Dies nutzt Haskell aus, indem intern für n auf der rechten Seite der Funktionsdefinition anstelle von beispielsweise (0+1+1+1) ein Zeiger auf die Berechnung eingesetzt wird. Wird ein Ausdruck an einer Stelle im Programm ausgerechnet, steht das Ergebnis auch an anderen Stellen zur Verfügung.


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Lazy evaluation — In computer programming, lazy evaluation (or delayed evaluation) is the technique of delaying a computation until such time as the result of the computation is known to be needed.The actions of lazy evaluation include: performance increases due… …   Wikipedia

  • lazy evaluation — atidėtasis vykdymas statusas T sritis informatika apibrėžtis ↑Reiškinio skaičiavimo, funkcijos arba procedūros vykdymo sulaikymas iki tol, kol bus reikalingas jų vykdymo rezultatas. Programoje užrašytas veiksmas įsimenamas, bet nevykdomas –… …   Enciklopedinis kompiuterijos žodynas

  • lazy evaluation — noun Any of a variety of computing techniques that delays the computation of expressions until (and unless) the results are needed. Ant: strict evaluation, eager evaluation …   Wiktionary

  • Evaluation strategy — Evaluation strategies Strict evaluation Applicative order Call by value Call by reference Call by sharing Call by copy restore Non strict evaluation Normal order Call by name Call by need/Lazy evaluation …   Wikipedia

  • Lazy systematic unit testing — Lazy Systematic Unit TestingA J H Simons, JWalk: Lazy systematic unit testing of Java classes by design introspection and user interaction, Automated Software Engineering, 14 (4), December , ed. B. Nuseibeh, (Boston: Springer, 2007), 369 418.] is …   Wikipedia

  • Lazy loading — is a design pattern commonly used in computer programming to defer initialization of an object until the point at which it is needed. It can contribute to efficiency in the program s operation if properly and appropriately used. The opposite of… …   Wikipedia

  • Lazy — can refer to: * Laziness, the lack of desire to expend effort * Łazy, a town in Poland (and other places in Poland with the same name) * Lazy (Orlová), a former village now part of the town of Orlová in the Czech Republic * Lazy (song), by Suede… …   Wikipedia

  • Evaluation (disambiguation) — Evaluation is the process of characterizing and appraising something of interest or of determining the value of an expression (mathematics). Computer science * determining the value of an expression (programming) * Eager evaluation or strict… …   Wikipedia

  • Lazy ML — (LML) is a functional programming language developed in the early 1980s by Lennart Augustsson and Thomas Johnsson at Chalmers University of Technology, prior to Miranda and Haskell. LML is a strongly typed, statically scoped language with lazy… …   Wikipedia

  • Lazy initialization — In computer programming, lazy initialization is the tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed. This is typically accomplished by maintaining a flag… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”