<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Lazy_Evaluation</id>
	<title>Lazy Evaluation - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Lazy_Evaluation"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Lazy_Evaluation&amp;action=history"/>
	<updated>2026-06-06T07:13:43Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Lazy_Evaluation&amp;diff=1205128&amp;oldid=prev</id>
		<title>imported&gt;Jbergner: /* Einleitung */ {{Belege fehlen}}</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Lazy_Evaluation&amp;diff=1205128&amp;oldid=prev"/>
		<updated>2023-02-05T08:19:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Einleitung: &lt;/span&gt; {{Belege fehlen}}&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lazy Evaluation&amp;#039;&amp;#039;&amp;#039; (bequeme [faule] Auswertung) bezeichnet in der [[Informatik]] eine Art der Auswertung von [[Ausdruck (Programmierung)|Ausdrücken]], bei der das Ergebnis des auszuwertenden Ausdrucks nur so weit berechnet wird, wie es gerade benötigt wird.&lt;br /&gt;
&lt;br /&gt;
Ein Vorteil einer solchen [[Auswertung (Informatik)|Auswertungsstrategie]] ist Zeitersparnis, da Funktionsaufrufe ganz vermieden oder zumindest teilweise eingespart werden können. Außerdem gibt &amp;#039;&amp;#039;Lazy Evaluation&amp;#039;&amp;#039; dem Programmierer die Möglichkeit, [[Datenstruktur|unendliche Datenstrukturen]] zu verwenden. Ein Nachteil ist die erschwerte [[Debugger|Fehlerbereinigung]] in [[Computerprogramm|Programmen]], die &amp;#039;&amp;#039;lazy&amp;#039;&amp;#039; 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 [[Wirkung (Informatik)|Nebenwirkung]] haben können.&lt;br /&gt;
&lt;br /&gt;
Ein auf [[Logische Verknüpfung|logische Ausdrücke]] eingeschränkter Spezialfall ist die [[Kurzschlussauswertung]], die auch in vielen nicht-&amp;#039;&amp;#039;lazy&amp;#039;&amp;#039;-Sprachen wie [[C (Programmiersprache)|C]] oder [[Java (Programmiersprache)|Java]] implementiert ist.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das folgende in [[Haskell (Programmiersprache)|Haskell]] geschriebene Beispiel zeigt eine Anwendung von &amp;#039;&amp;#039;Lazy Evaluation&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Haskell&amp;quot;&amp;gt;&lt;br /&gt;
   squares n = (n*n) : squares (n+1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Funktion &amp;lt;code&amp;gt;squares&amp;lt;/code&amp;gt; berechnet die unendliche [[Liste (Datenstruktur)|Liste]] aller [[Quadratzahl]]en beginnend bei &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Das Quadrat von&amp;amp;nbsp;3 ließe sich also durch den Ausdruck &amp;amp;nbsp; &amp;lt;code&amp;gt;squares&amp;amp;nbsp;0&amp;amp;nbsp;!!&amp;amp;nbsp;3&amp;lt;/code&amp;gt; &amp;amp;nbsp; berechnen – dabei holt &amp;amp;nbsp; &amp;lt;code&amp;gt;l&amp;amp;nbsp;!!&amp;amp;nbsp;x&amp;lt;/code&amp;gt; &amp;amp;nbsp; das Element an der Position &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; aus der Liste &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt;. Ohne &amp;#039;&amp;#039;Lazy Evaluation&amp;#039;&amp;#039; würde der Aufruf von &amp;lt;code&amp;gt;squares&amp;amp;nbsp;0&amp;lt;/code&amp;gt; nicht terminieren. Stattdessen werden nur die Teile berechnet, die wirklich benötigt werden.&lt;br /&gt;
Die interne Auswertung sieht verkürzt wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;poem&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;squares 0 !! 3&amp;lt;/code&amp;gt;&lt;br /&gt;
→ &amp;lt;code&amp;gt;0*0 : squares (0+1) !! 3&amp;lt;/code&amp;gt;&lt;br /&gt;
→ &amp;lt;code&amp;gt;squares (0+1) !! 2&amp;lt;/code&amp;gt;&lt;br /&gt;
→ &amp;lt;code&amp;gt;(0+1)*(0+1) : squares (0+1+1) !! 2&amp;lt;/code&amp;gt;&lt;br /&gt;
…&lt;br /&gt;
→ &amp;lt;code&amp;gt;(0+1+1+1)*(0+1+1+1) : squares (0+1+1+1+1) !! 0&amp;lt;/code&amp;gt;&lt;br /&gt;
→ &amp;lt;code&amp;gt;(0+1+1+1)*(0+1+1+1)&amp;lt;/code&amp;gt;&lt;br /&gt;
→ &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/poem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf den ersten Blick scheint die &amp;#039;&amp;#039;Lazy Evaluation&amp;#039;&amp;#039; hier Berechnungen mehrfach auszuführen, da auf der rechten Seite der Funktion &amp;lt;code&amp;gt;squares&amp;lt;/code&amp;gt; der Parameter &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; mehrfach verwendet wird und statt eines Werts eine nicht ausgeführte Berechnung eingesetzt wird. Da Haskell eine rein [[Funktionale Programmierung|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 &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; auf der rechten Seite der Funktionsdefinition anstelle von beispielsweise &amp;lt;code&amp;gt;(0+1+1+1)&amp;lt;/code&amp;gt; ein [[Zeiger (Informatik)|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.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierparadigma]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Jbergner</name></author>
	</entry>
</feed>