<?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=Strikte_Funktion</id>
	<title>Strikte Funktion - 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=Strikte_Funktion"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Strikte_Funktion&amp;action=history"/>
	<updated>2026-06-02T17:08:33Z</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=Strikte_Funktion&amp;diff=533188&amp;oldid=prev</id>
		<title>imported&gt;DynaMoToR: /* Literatur */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Strikte_Funktion&amp;diff=533188&amp;oldid=prev"/>
		<updated>2024-04-15T04:34:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Literatur&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;In der [[Informatik]] heißt eine einstellige [[Funktion (Mathematik)|Funktion]] &amp;#039;&amp;#039;&amp;#039;strikt&amp;#039;&amp;#039;&amp;#039;, wenn gilt:&lt;br /&gt;
Ist ihr Argument undefiniert (&amp;lt;math&amp;gt;\bot&amp;lt;/math&amp;gt;, &amp;#039;&amp;#039;bottom&amp;#039;&amp;#039;), so ist das Funktionsresultat ebenfalls undefiniert.&lt;br /&gt;
Also wenn: &amp;lt;math&amp;gt;f(\bot) = \bot&amp;lt;/math&amp;gt;. Eine mehrstellige Funktion kann jeweils in einzelnen Argumenten oder in allen Argumenten strikt sein. Sind alle Argumente strikt, dann ist die Funktion strikt.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
In [[Haskell (Programmiersprache)|Haskell]] sind definierte Funktionen per default nicht-strikt, aber es gibt Strictness-Annotationen, mit denen man einzelne Argumente als strikt markieren kann. Beispielsweise liefert folgendes Haskell-Programm:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
{-# OPTIONS -XBangPatterns #-}&lt;br /&gt;
&lt;br /&gt;
bottom = undefined&lt;br /&gt;
&lt;br /&gt;
f  a  b = a&lt;br /&gt;
f&amp;#039; a !b = a&lt;br /&gt;
&lt;br /&gt;
main = do&lt;br /&gt;
  print $ f  [1,2,3] bottom&lt;br /&gt;
  print $ f&amp;#039; [1,2,3] bottom&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
folgende Ausgabe:&lt;br /&gt;
  [1,2,3]&lt;br /&gt;
  strict: Prelude.undefined&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel ist die Funktion &amp;lt;math&amp;gt;f&amp;#039;&amp;lt;/math&amp;gt; strikt und die Funktion &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; nicht-strikt.&lt;br /&gt;
&lt;br /&gt;
== Nicht-Strikte Funktionen in strikten Programmiersprachen ==&lt;br /&gt;
Eine [[Programmiersprache]] wird als strikt bezeichnet, wenn definierte Funktionen standardmäßig strikt sind.&lt;br /&gt;
Auch in Programmiersprachen mit [[Funktionale Programmierung#Bedarfsauswertung und strikte Auswertung|strikter Auswertung]] sind oft einzelne Funktionen vordefiniert, die [[Funktionale Programmierung#Bedarfsauswertung und strikte Auswertung|nicht-strikt]] ausgewertet werden.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise enthalten imperative Programmiersprachen wie [[Java (Programmiersprache)|Java]] oder [[C (Programmiersprache)|C]] den logischen-Oder-Operator (also eine zweistellige Funktion in Infix-Schreibweise), der nicht-strikt ausgewertet wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
byte a;&lt;br /&gt;
boolean b = (a == 0 || 1/a &amp;gt; 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist &amp;#039;&amp;#039;a&amp;#039;&amp;#039; hier gleich 0, so wird der hintere Teil des Ausdruckes nicht mehr ausgewertet.&lt;br /&gt;
Wäre das [[Disjunktion|Oder]] (&amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt;) hier streng, so wäre &amp;#039;&amp;#039;b&amp;#039;&amp;#039; undefiniert, falls &amp;#039;&amp;#039;a&amp;#039;&amp;#039; gleich 0 wäre. Diese Art der Auswertung wird auch [[Kurzschlussauswertung]] bezeichnet.&lt;br /&gt;
&lt;br /&gt;
In [[Funktionale Programmierung|funktionalen Programmiersprachen]] mit strikter Auswertung muss die if-then-else Funktion nicht-strikt definiert sein, damit überhaupt eine Rekursion (die einen if-Ausdruck enthält) programmiert werden kann. In Pseudo-Code, der [[Pattern Matching|Pattern-Matching]] verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
-- if_then_else condition expr1 expr2&lt;br /&gt;
&lt;br /&gt;
if_then_else True  expr1 expr2 = expr1&lt;br /&gt;
if_then_else False expr1 expr2 = expr2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Auswertungsstrategie ==&lt;br /&gt;
&lt;br /&gt;
Je nachdem, welche [[Auswertung (Informatik)|Auswertungsstrategie]] eine funktionale Programmiersprache verwendet, sind definierte Funktionen standardmäßig strikt oder nicht-strikt. Beispielsweise führt die Auswertungsstrategie left-most/innermost-first zu strikten Funktionen. Die Auswertung bezieht sich auf die Auswahl eines reduzierbaren Ausdruckes (Reducible-Expression, Redex) in einem funktionalen Ausdruck, der noch nicht in [[Normalform]] ist. Die Normalform liegt vor, wenn der Ausdruck Redex-frei ist und die Ausführung eines funktionalen Programms entspricht der Überführung des Programms in die Normalform. Die innermost-first-Auswertung wird auch als strikte Auswertung bezeichnet. Intuitiv entspricht dies der Vorgehensweise, dass die Argumente einer Funktion vor dem Funktionsaufruf ausgewertet werden (und nicht erst, wenn sie benötigt werden).&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{bibISBN|0134843460}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
  |Autor=Hal Abelson, Gerald Jay Sussman&lt;br /&gt;
  |Titel=Structure and Interpretation of Computer Programs&lt;br /&gt;
  |Auflage=2.&lt;br /&gt;
  |Verlag=The MIT Press&lt;br /&gt;
  |Ort=Cambridge MA&lt;br /&gt;
  |Jahr=1996&lt;br /&gt;
  |ISBN=978-0-262-01153-2&lt;br /&gt;
  |Online=[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html Buch als HTML-Version]&lt;br /&gt;
  |Kommentar=Abschnitt 4.2.1}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
  |Autor=[[Herbert Klaeren]], Michael Sperber&lt;br /&gt;
  |Titel=Die Macht der Abstraktion&lt;br /&gt;
  |Verlag=Teubner&lt;br /&gt;
  |Ort=Wiesbaden&lt;br /&gt;
  |Jahr=2007&lt;br /&gt;
  |ISBN=978-3-8351-0155-5&lt;br /&gt;
  |Seiten=250}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
  |Autor=Peter Pepper, Petra Hofstedt&lt;br /&gt;
  |Titel=Funktionale Programmierung&lt;br /&gt;
  |Verlag=Springer&lt;br /&gt;
  |Ort=Berlin&lt;br /&gt;
  |Jahr=2006&lt;br /&gt;
  |ISBN=978-3-540-20959-1&lt;br /&gt;
  |Seiten=32}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmiersprachen]]&lt;/div&gt;</summary>
		<author><name>imported&gt;DynaMoToR</name></author>
	</entry>
</feed>