https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Funktionallogische_Programmierung Funktionallogische Programmierung - Versionsgeschichte 2025-06-25T19:59:52Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.45.0-wmf.6 https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=256835762&oldid=prev Agathenon: /* Einleitung */ wikifiziert 2025-06-09T10:52:06Z <p><span class="autocomment">Einleitung: </span> wikifiziert</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 9. Juni 2025, 12:52 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die '''Funktionallogische Programmierung''' ist die Vereinigung des <del style="font-weight: bold; text-decoration: none;">funktionalen</del> mit dem logischen Paradigma in einer Programmiersprache. Dies schließt die meisten starken Konzepte der Paradigmen mit ein, dazu gehören Funktionen höherer Ordnung, nicht-deterministische Ausführung und Unifikation. Wegbereiter dieser Schöpfung war [[λProlog]]&lt;ref&gt;{{Literatur |Autor=Gopalan Nadathur, D. Miller |Hrsg=D. M. Gabbay, C. J. Hogger, J. A. Robinson |Titel=Logic Programming |Reihe=Handbook of Logic in Artificial Intelligence and Logic Programming |BandReihe=5 |Verlag=Oxford University Press |Datum=1998 |ISBN=0-19-853792-1 |Kapitel=Higher-Order Logic Programming |Seiten=499–590}}&lt;/ref&gt; in den Neunzigern. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die '''Funktionallogische Programmierung''' ist die Vereinigung des <ins style="font-weight: bold; text-decoration: none;">[[Funktionale Programmierung|funktional]]en</ins> mit dem <ins style="font-weight: bold; text-decoration: none;">[[Logik|</ins>logischen<ins style="font-weight: bold; text-decoration: none;">]]</ins> <ins style="font-weight: bold; text-decoration: none;">[[</ins>Paradigma<ins style="font-weight: bold; text-decoration: none;">]]</ins> in einer <ins style="font-weight: bold; text-decoration: none;">[[</ins>Programmiersprache<ins style="font-weight: bold; text-decoration: none;">]]</ins>. Dies schließt die meisten starken Konzepte der Paradigmen mit ein, dazu gehören Funktionen höherer Ordnung, nicht-deterministische Ausführung und Unifikation. Wegbereiter dieser Schöpfung war [[λProlog]]&lt;ref&gt;{{Literatur |Autor=Gopalan Nadathur, D. Miller |Hrsg=D. M. Gabbay, C. J. Hogger, J. A. Robinson |Titel=Logic Programming |Reihe=Handbook of Logic in Artificial Intelligence and Logic Programming |BandReihe=5 |Verlag=Oxford University Press |Datum=1998 |ISBN=0-19-853792-1 |Kapitel=Higher-Order Logic Programming |Seiten=499–590}}&lt;/ref&gt; in den <ins style="font-weight: bold; text-decoration: none;">[[1990er|</ins>Neunzigern<ins style="font-weight: bold; text-decoration: none;">-Jahren]]</ins>. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Grundlagen ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Grundlagen ==</div></td> </tr> </table> Agathenon https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=244058762&oldid=prev Prüm: /* Einzelnachweise */ 2024-04-15T04:19:34Z <p><span class="autocomment">Einzelnachweise</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. April 2024, 06:19 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 107:</td> <td colspan="2" class="diff-lineno">Zeile 107:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmiersprache als Thema]]</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> </table> Prüm https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=227517429&oldid=prev Phzh: Form, typo 2022-10-31T13:59:01Z <p>Form, typo</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 31. Oktober 2022, 15:59 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Die '''Funktionallogische Programmierung''' ist die Vereinigung des funktionalen mit dem logischen Paradigma in einer Programmiersprache. Dies schließt die meisten starken Konzepte der Paradigmen mit ein, dazu gehören Funktionen höherer Ordnung, nicht-deterministische Ausführung und Unifikation. Wegbereiter dieser Schöpfung war [[λProlog]]&lt;ref&gt;{{<del style="font-weight: bold; text-decoration: none;">cite</del> <del style="font-weight: bold; text-decoration: none;">book</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Die '''Funktionallogische Programmierung''' ist die Vereinigung des funktionalen mit dem logischen Paradigma in einer Programmiersprache. Dies schließt die meisten starken Konzepte der Paradigmen mit ein, dazu gehören Funktionen höherer Ordnung, nicht-deterministische Ausführung und Unifikation. Wegbereiter dieser Schöpfung war [[λProlog]]&lt;ref&gt;{{<ins style="font-weight: bold; text-decoration: none;">Literatur</ins> <ins style="font-weight: bold; text-decoration: none;">|Autor=Gopalan Nadathur, D. Miller |Hrsg=D. M. Gabbay, C. J. Hogger, J. A. Robinson |Titel=Logic Programming |Reihe=Handbook of Logic in Artificial Intelligence and Logic Programming |BandReihe=5 |Verlag=Oxford University Press |Datum=1998 |ISBN=0-19-853792-1 |Kapitel=Higher-Order Logic Programming |Seiten=499–590}}&lt;/ref&gt; in den Neunzigern. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</ins></div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|first1=Gopalan</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|last1=Nadathur</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|first2=D.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|last2=Miller</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|chapter=Higher-Order Logic Programming</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|title=Logic Programming</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|volume=5 | isbn=0198537921</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|series=Handbook of Logic in Artificial Intelligence and Logic Programming</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor=D. M. Gabbay, C. J. Hogger, J. A. Robinson</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|publisher=Oxford University Press</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|year=1998</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|pages=499–590}}&lt;/ref&gt; in den Neunzigern. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Grundlagen ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Grundlagen ==</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 17:</td> <td colspan="2" class="diff-lineno">Zeile 5:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Funktionale Programmierung ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Funktionale Programmierung ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein funktionales Programm ist eine Ansammlung von Funktionen oder Regeln. Eine funktionale Berechnung besteht aus dem Ersetzen von Teilausdrücken durch (unter Berücksichtigung der Funktionsdefinition) gleichwertige Teilausdrücke, solange bis keine Ersetzungen bzw. Reduktionen mehr möglich sind und ein Ergebnis bestimmt oder eine [[Normalform]] erreicht wird. Einen Teilausdruck, der reduziert werden kann, wird auch als Redex (von {{<del style="font-weight: bold; text-decoration: none;">EnS</del>|reducible expression|Audio=|IPA=|de=reduzierbarer Ausdruck}}) bezeichnet. Für die nächsten Beispiele sei die Funktion &lt;code&gt;verdoppeln&lt;/code&gt; definiert durch</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein funktionales Programm ist eine Ansammlung von Funktionen oder Regeln. Eine funktionale Berechnung besteht aus dem Ersetzen von Teilausdrücken durch (unter Berücksichtigung der Funktionsdefinition) gleichwertige Teilausdrücke, solange bis keine Ersetzungen bzw. Reduktionen mehr möglich sind und ein Ergebnis bestimmt oder eine [[Normalform]] erreicht wird. Einen Teilausdruck, der reduziert werden kann, wird auch als Redex (von {{<ins style="font-weight: bold; text-decoration: none;">enS</ins>|reducible expression|Audio=|IPA=|de=reduzierbarer Ausdruck}}) bezeichnet. Für die nächsten Beispiele sei die Funktion &lt;code&gt;verdoppeln&lt;/code&gt; definiert durch</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln x &lt;span style="color:green"&gt;'''='''&lt;/span&gt; x &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; x</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln x &lt;span style="color:green"&gt;'''='''&lt;/span&gt; x &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; x</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 29:</td> <td colspan="2" class="diff-lineno">Zeile 17:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln (''1 &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; 2'') → ''verdoppeln 3'' → ''3 &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; 3'' → 6</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln (''1 &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; 2'') → ''verdoppeln 3'' → ''3 &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; 3'' → 6</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>In diesem Fall führen beide Auswertungen zum gleichen Resultat. Diese Eigenschaft heißt [[Konfluenz (Informatik)|Konfluenz]] und folgt aus der fundamentalen Eigenschaft reiner funktionaler Sprachen, der [[<del style="font-weight: bold; text-decoration: none;">referenzielle</del> Transparenz|referenziellen Transparenz]]: der zu bestimmende Wert eines Ausdrucks hängt nicht (z.&amp;nbsp;B. aufgrund von Seiteneffekten) von der Reihenfolge oder dem Zeitpunkt der Auswertung ab. Daher sind Beweise leichter zu führen und die Programme leicht wartbar.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>In diesem Fall führen beide Auswertungen zum gleichen Resultat. Diese Eigenschaft heißt [[Konfluenz (Informatik)|Konfluenz]] und folgt aus der fundamentalen Eigenschaft reiner funktionaler Sprachen, der [[<ins style="font-weight: bold; text-decoration: none;">Referenzielle</ins> Transparenz|referenziellen Transparenz]]: der zu bestimmende Wert eines Ausdrucks hängt nicht (z.&amp;nbsp;B. aufgrund von Seiteneffekten) von der Reihenfolge oder dem Zeitpunkt der Auswertung ab. Daher sind Beweise leichter zu führen und die Programme leicht wartbar.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Algebraische Datentypen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Algebraische Datentypen ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 76:</td> <td colspan="2" class="diff-lineno">Zeile 64:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das Einschränken ist insbesondere nützlich, da es ermöglicht, Funktionen wie Relationen zu handhaben; Werte können auf gewisse Art in beide Richtungen bestimmt werden. Unter anderem illustriert dies das vorhergehende Beispiel.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das Einschränken ist insbesondere nützlich, da es ermöglicht, Funktionen wie Relationen zu handhaben; Werte können auf gewisse Art in beide Richtungen bestimmt werden. Unter anderem illustriert dies das vorhergehende Beispiel.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Wie bereits angemerkt können Einschränkungen wie eine Reduktion des Auswertegraphs aufgefasst werden und es gibt häufig viele verschiedene Wege (Strategien) einen Graphen zu reduzieren. Antoy et al.&lt;ref&gt;{{<del style="font-weight: bold; text-decoration: none;">cite</del> <del style="font-weight: bold; text-decoration: none;">journal</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Wie bereits angemerkt können Einschränkungen wie eine Reduktion des Auswertegraphs aufgefasst werden und es gibt häufig viele verschiedene Wege (Strategien) einen Graphen zu reduzieren. Antoy et al.&lt;ref&gt;{{<ins style="font-weight: bold; text-decoration: none;">Literatur</ins> <ins style="font-weight: bold; text-decoration: none;">|Autor=Sergio Antoy, Rachid Echahed and Michael Hanus |Titel=A Needed Narrowing Strategy |Sammelwerk=Journal of the ACM |Band=47 |Nummer=4 |Verlag=ACM |Datum=2007 |ISSN=0004-5411 |Seiten=776–822 |Online=https://dl.acm.org/doi/10.1145/347476.347484 |DOI=10.1145/347476.347484}}&lt;/ref&gt; bewiesen in den Neunzigern, dass eine bestimmte Strategie, das ''needed narrowing,'' optimal ist mit möglichst wenigen Reduktionen eine Normalform zu erhalten. Needed narrowing ist eine Form von [[Lazy Evaluation|Bedarfsauswertung]], im Gegensatz zur SLD-Auflösungsstrategie&lt;!-- siehe [[:en:SLD resolution|SLD resolution]] (engl. WP) --&gt; von Prolog.</ins></div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | author = Sergio Antoy, Rachid Echahed and Michael Hanus</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | title = A Needed Narrowing Strategy</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | journal = Journal of the ACM</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | volume = 47</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | issue = 4</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | pages = 776–822</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | publisher = ACM</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | year = 2007</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | url = https://dl.acm.org/doi/10.1145/347476.347484</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | issn = 0004-5411</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | doi = 10.1145/347476.347484</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>}}&lt;/ref&gt; bewiesen in den Neunzigern, dass eine bestimmte Strategie, das ''needed narrowing,'' optimal ist mit möglichst wenigen Reduktionen eine Normalform zu erhalten. Needed narrowing ist eine Form von [[Lazy Evaluation|Bedarfsauswertung]], im Gegensatz zur SLD-Auflösungsstrategie&lt;!-- siehe [[:en:SLD resolution|SLD resolution]] (engl. WP) --&gt; von Prolog.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Funktionale Muster ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Funktionale Muster ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 97:</td> <td colspan="2" class="diff-lineno">Zeile 73:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> last (ys &lt;span style="color:darkgreen"&gt;++&lt;/span&gt; &lt;span style="color:maroon"&gt;[&lt;/span&gt;e&lt;span style="color:maroon"&gt;]&lt;/span&gt;) &lt;span style="color:green"&gt;'''='''&lt;/span&gt; e</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> last (ys &lt;span style="color:darkgreen"&gt;++&lt;/span&gt; &lt;span style="color:maroon"&gt;[&lt;/span&gt;e&lt;span style="color:maroon"&gt;]&lt;/span&gt;) &lt;span style="color:green"&gt;'''='''&lt;/span&gt; e</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Rein funktionale Sprachen erlauben eine derartige Definition nicht, da das Muster auf der linken Seite eine definierte Funktion enthält (nämlich den Operator &lt;code&gt;++&lt;/code&gt;), die nicht notwendig [[Injektivität|injektiv]] ist; ein solches Muster heißt funktionales Muster.&lt;ref&gt;<del style="font-weight: bold; text-decoration: none;"> </del>Sergio Antoy and Michael Hanus: Declarative Programming with Function Patterns, LOPSTR 2005 {{<del style="font-weight: bold; text-decoration: none;">doi</del>|10.1007/11680093_2}}&lt;/ref&gt; Funktionale Muster werden durch die Kombination der funktionalen und logischen Eigenschaften sowie der Unterstützung von einfachen Aufgabendefinitionen, die tiefe Mustervergleiche in hierarchische Strukturen erfordern. In diesem Beispiel ist &lt;code&gt;++&lt;/code&gt; allgemein nicht injektiv, denn jede nicht-leere Liste kann mit &lt;code&gt;[] ++ l&lt;/code&gt; als auch &lt;code&gt;l ++ []&lt;/code&gt; erzeugt werden; jedoch können die freien Variablen hier nur auf eine mögliche Art gewählt werden, da sie Einschränkungen unterliegen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Rein funktionale Sprachen erlauben eine derartige Definition nicht, da das Muster auf der linken Seite eine definierte Funktion enthält (nämlich den Operator &lt;code&gt;++&lt;/code&gt;), die nicht notwendig [[Injektivität|injektiv]] ist; ein solches Muster heißt funktionales Muster.&lt;ref&gt;Sergio Antoy and Michael Hanus: Declarative Programming with Function Patterns, LOPSTR 2005 {{<ins style="font-weight: bold; text-decoration: none;">DOI</ins>|10.1007/11680093_2}}&lt;/ref&gt; Funktionale Muster werden durch die Kombination der funktionalen und logischen Eigenschaften sowie der Unterstützung von einfachen Aufgabendefinitionen, die tiefe Mustervergleiche in hierarchische Strukturen erfordern. In diesem Beispiel ist &lt;code&gt;++&lt;/code&gt; allgemein nicht injektiv, denn jede nicht-leere Liste kann mit &lt;code&gt;[] ++ l&lt;/code&gt; als auch &lt;code&gt;l ++ []&lt;/code&gt; erzeugt werden; jedoch können die freien Variablen hier nur auf eine mögliche Art gewählt werden, da sie Einschränkungen unterliegen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Nichtdeterminismus ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Nichtdeterminismus ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 106:</td> <td colspan="2" class="diff-lineno">Zeile 82:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> x &lt;span style="color:darkgreen"&gt;?&lt;/span&gt; y &lt;span style="color:green"&gt;'''='''&lt;/span&gt; y</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> x &lt;span style="color:darkgreen"&gt;?&lt;/span&gt; y &lt;span style="color:green"&gt;'''='''&lt;/span&gt; y</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Daher gibt die Auswertung des Ausdrucks &lt;code&gt;0&amp;nbsp;?&amp;nbsp;1&lt;/code&gt; sowohl &lt;code&gt;0&lt;/code&gt; als auch &lt;code&gt;1&lt;/code&gt; zurück. Das Rechnen mit nichtdeterministischen Operationen und das Rechnen mit freien Variablen unter Einschränkungen hat die gleiche Ausdrucksstärke.&lt;ref&gt;<del style="font-weight: bold; text-decoration: none;"> </del>Sergio Antoy and Michael Hanus: Overlapping Rules and Logic Variables in Functional Logic Programs, International Conference on Logic Programming 2006 {{<del style="font-weight: bold; text-decoration: none;">doi</del>|10.1007/11799573_9}}&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Daher gibt die Auswertung des Ausdrucks &lt;code&gt;0&amp;nbsp;?&amp;nbsp;1&lt;/code&gt; sowohl &lt;code&gt;0&lt;/code&gt; als auch &lt;code&gt;1&lt;/code&gt; zurück. Das Rechnen mit nichtdeterministischen Operationen und das Rechnen mit freien Variablen unter Einschränkungen hat die gleiche Ausdrucksstärke.&lt;ref&gt;Sergio Antoy and Michael Hanus: Overlapping Rules and Logic Variables in Functional Logic Programs, International Conference on Logic Programming 2006 {{<ins style="font-weight: bold; text-decoration: none;">DOI</ins>|10.1007/11799573_9}}&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Regeln, mit denen &lt;code&gt;?&lt;/code&gt; definiert wurde, zeigen ein wichtiges Merkmal funktionallogischer Sprachen: Alle Regeln werden versucht um eine bestimmte Operation auszuwerten; insbesondere wird nicht die oberste realisierbare Gleichung angewendet. Daher kann man mit</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Regeln, mit denen &lt;code&gt;?&lt;/code&gt; definiert wurde, zeigen ein wichtiges Merkmal funktionallogischer Sprachen: Alle Regeln werden versucht um eine bestimmte Operation auszuwerten; insbesondere wird nicht die oberste realisierbare Gleichung angewendet. Daher kann man mit</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 123:</td> <td colspan="2" class="diff-lineno">Zeile 99:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>definiert, die jede Permutation einer gegebenen Liste zurückgibt.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>definiert, die jede Permutation einer gegebenen Liste zurückgibt.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>== Belege ==</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"><a class="mw-diff-movedpara-left" title="Der Absatz wurde verschoben. Klicken, um zur neuen Stelle zu springen." href="#movedpara_16_2_rhs">&#x26AB;</a></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><a name="movedpara_14_2_lhs"></a>&lt;references/&gt;</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>== Einzelnachweise ==</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker"><a class="mw-diff-movedpara-right" title="Der Absatz wurde verschoben. Klicken, um zur alten Stelle zu springen." href="#movedpara_14_2_lhs">&#x26AB;</a></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><a name="movedpara_16_2_rhs"></a>&lt;references<ins style="font-weight: bold; text-decoration: none;"> </ins>/&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> </tr> </table> Phzh https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=215019881&oldid=prev DerMaxdorfer: Zeichensetzung, fehlendes Wort ergänzt 2021-08-24T15:07:53Z <p>Zeichensetzung, fehlendes Wort ergänzt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. August 2021, 17:07 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 32:</td> <td colspan="2" class="diff-lineno">Zeile 32:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Algebraische Datentypen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Algebraische Datentypen ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ebenso wie funktionale Sprachen unterstützen viele funktionallogische Sprachen die Definition von algebraischen Typen indem ihre Konstruktoren aufgelistet werden. Beispielsweise wird der Datentyp &lt;code&gt;Bool&lt;/code&gt; für Wahrheitswerte mit den Konstruktoren &lt;code&gt;True&lt;/code&gt; und &lt;code&gt;False&lt;/code&gt; wie folgt definiert:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ebenso wie funktionale Sprachen unterstützen viele funktionallogische Sprachen die Definition von algebraischen Typen<ins style="font-weight: bold; text-decoration: none;">,</ins> indem ihre Konstruktoren aufgelistet werden. Beispielsweise wird der Datentyp &lt;code&gt;Bool&lt;/code&gt; für Wahrheitswerte mit den Konstruktoren &lt;code&gt;True&lt;/code&gt; und &lt;code&gt;False&lt;/code&gt; wie folgt definiert:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;Bool&lt;/span&gt; &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;True&lt;/span&gt; &lt;span style="color:green"&gt;'''|'''&lt;/span&gt; &lt;span style="color:maroon"&gt;False&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;Bool&lt;/span&gt; &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;True&lt;/span&gt; &lt;span style="color:green"&gt;'''|'''&lt;/span&gt; &lt;span style="color:maroon"&gt;False&lt;/span&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 61:</td> <td colspan="2" class="diff-lineno">Zeile 61:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt; beschrieben, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt; beschrieben, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird<ins style="font-weight: bold; text-decoration: none;">,</ins> indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> last &lt;span style="color:green"&gt;'''::'''&lt;/span&gt; &lt;span style="color:purple"&gt;[&lt;/span&gt;a&lt;span style="color:purple"&gt;]&lt;/span&gt; &lt;span style="color:green"&gt;'''-&gt;'''&lt;/span&gt; a</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> last &lt;span style="color:green"&gt;'''::'''&lt;/span&gt; &lt;span style="color:purple"&gt;[&lt;/span&gt;a&lt;span style="color:purple"&gt;]&lt;/span&gt; &lt;span style="color:green"&gt;'''-&gt;'''&lt;/span&gt; a</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 69:</td> <td colspan="2" class="diff-lineno">Zeile 69:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;where&lt;/span&gt;''' ys, e '''&lt;span style="color:darkblue"&gt;free&lt;/span&gt;'''</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;where&lt;/span&gt;''' ys, e '''&lt;span style="color:darkblue"&gt;free&lt;/span&gt;'''</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Hier wird das Symbol &lt;code&gt;=:=&lt;/code&gt; für Gleichheitsbedingungen benutzt, um sie syntaktisch von definierenden Gleichheiten und Vergleichen zu unterscheiden. Auf ähnliche Weise können zusätzliche Variablen gebunden indem sie explizit mit &lt;code&gt;where&amp;nbsp;…&amp;nbsp;free&lt;/code&gt; deklariert werden. Die Deklaration ist notwendig und sinnvoll um Tippfehler zu vermeiden. Eine bedingte Gleichung der Form &lt;code&gt;L&amp;nbsp;|&amp;nbsp;B&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;R&lt;/code&gt; kann angewendet werden, falls die Bedingung &lt;code&gt;B&lt;/code&gt; gelöst wurde. Im Gegensatz zu rein funktionalen Sprachen, deren Bedingungen ausschließlich Muster oder Ausdrücke vom Typ &lt;code&gt;Bool&lt;/code&gt; sein können, unterstützen funktionallogische Sprachen außerdem das Lösen von Bedingungen durch das Erraten von Werten der Unbekannten in der Bedingung; Muster-Bedingungen sind ein Spezialfall davon. Einschränkungen, die im Folgenden erklärt werden, werden dafür herangezogen.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Hier wird das Symbol &lt;code&gt;=:=&lt;/code&gt; für Gleichheitsbedingungen benutzt, um sie syntaktisch von definierenden Gleichheiten und Vergleichen zu unterscheiden. Auf ähnliche Weise können zusätzliche Variablen gebunden<ins style="font-weight: bold; text-decoration: none;"> werden,</ins> indem sie explizit mit &lt;code&gt;where&amp;nbsp;…&amp;nbsp;free&lt;/code&gt; deklariert werden. Die Deklaration ist notwendig und sinnvoll um Tippfehler zu vermeiden. Eine bedingte Gleichung der Form &lt;code&gt;L&amp;nbsp;|&amp;nbsp;B&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;R&lt;/code&gt; kann angewendet werden, falls die Bedingung &lt;code&gt;B&lt;/code&gt; gelöst wurde. Im Gegensatz zu rein funktionalen Sprachen, deren Bedingungen ausschließlich Muster oder Ausdrücke vom Typ &lt;code&gt;Bool&lt;/code&gt; sein können, unterstützen funktionallogische Sprachen außerdem das Lösen von Bedingungen durch das Erraten von Werten der Unbekannten in der Bedingung; Muster-Bedingungen sind ein Spezialfall davon. Einschränkungen, die im Folgenden erklärt werden, werden dafür herangezogen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Einschränkungen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Einschränkungen ===</div></td> </tr> </table> DerMaxdorfer https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=207912613&oldid=prev Aka: https, Kleinkram 2021-01-21T18:54:04Z <p>https, Kleinkram</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 21. Januar 2021, 20:54 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 41:</td> <td colspan="2" class="diff-lineno">Zeile 41:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> not &lt;span style="color:maroon"&gt;False&lt;/span&gt; &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;True&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> not &lt;span style="color:maroon"&gt;False&lt;/span&gt; &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;True&lt;/span&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Das Vorgehen Ausdrücke durch gleichwertige zu ersetzen ist weiterhin gültig, wenn die Ausdrücke die entsprechende Form haben:<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Das Vorgehen Ausdrücke durch gleichwertige zu ersetzen ist weiterhin gültig, wenn die Ausdrücke die entsprechende Form haben:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> not (''not &lt;span style="color:maroon"&gt;False&lt;/span&gt;'') → ''not &lt;span style="color:maroon"&gt;True&lt;/span&gt;'' → &lt;span style="color:maroon"&gt;False&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> not (''not &lt;span style="color:maroon"&gt;False&lt;/span&gt;'') → ''not &lt;span style="color:maroon"&gt;True&lt;/span&gt;'' → &lt;span style="color:maroon"&gt;False&lt;/span&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Kompliziertere Datenstrukturen werden durch rekursive Datentypen dargestellt. Beispielsweise eine Liste über einem beliebigen Typen, deren Elemente ebendiesen Typ haben, ist entweder die leere Liste &lt;code&gt;[]&lt;/code&gt; oder eine nicht-leere Liste mit einem ersten Element &lt;code&gt;x&lt;/code&gt; und einem Restglied &lt;code&gt;xs&lt;/code&gt;, dargestellt durch &lt;code&gt;x : xs&lt;/code&gt;.<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Kompliziertere Datenstrukturen werden durch rekursive Datentypen dargestellt. Beispielsweise eine Liste über einem beliebigen Typen, deren Elemente ebendiesen Typ haben, ist entweder die leere Liste &lt;code&gt;[]&lt;/code&gt; oder eine nicht-leere Liste mit einem ersten Element &lt;code&gt;x&lt;/code&gt; und einem Restglied &lt;code&gt;xs&lt;/code&gt;, dargestellt durch &lt;code&gt;x : xs&lt;/code&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;[]&lt;/span&gt; &lt;span style="color:darkgreen"&gt;-- [] ist ein parameterloser Konstruktor (d.&amp;nbsp;h. ein Literal), das die leere Liste darstellt.&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> '''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;[]&lt;/span&gt; &lt;span style="color:darkgreen"&gt;-- [] ist ein parameterloser Konstruktor (d.&amp;nbsp;h. ein Literal), das die leere Liste darstellt.&lt;/span&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 59:</td> <td colspan="2" class="diff-lineno">Zeile 59:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Logische Programmierung ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Logische Programmierung ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt; beschrieben, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;.<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt; beschrieben, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 85:</td> <td colspan="2" class="diff-lineno">Zeile 85:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | publisher = ACM</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | publisher = ACM</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | year = 2007</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | year = 2007</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> | url = <del style="font-weight: bold; text-decoration: none;">http</del>://<del style="font-weight: bold; text-decoration: none;">doi</del>.acm.org/10.1145/347476.347484</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> | url = <ins style="font-weight: bold; text-decoration: none;">https</ins>://<ins style="font-weight: bold; text-decoration: none;">dl</ins>.acm.org<ins style="font-weight: bold; text-decoration: none;">/doi</ins>/10.1145/347476.347484</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | issn = 0004-5411</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | issn = 0004-5411</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | doi = 10.1145/347476.347484</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> | doi = 10.1145/347476.347484</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 128:</td> <td colspan="2" class="diff-lineno">Zeile 128:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Weblinks ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [<del style="font-weight: bold; text-decoration: none;">http</del>://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [<ins style="font-weight: bold; text-decoration: none;">https</ins>://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[Kategorie:Programmierparadigma]]</div></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=205250476&oldid=prev H3xc0d3r: /* Logische Programmierung */ fehlendes Verb eingefügt 2020-11-06T13:16:41Z <p><span class="autocomment">Logische Programmierung: </span> fehlendes Verb eingefügt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 6. November 2020, 15:16 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 59:</td> <td colspan="2" class="diff-lineno">Zeile 59:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Logische Programmierung ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Logische Programmierung ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt;, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;. </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Es sei zur Demonstration die Funktion &lt;code&gt;last&lt;/code&gt;<ins style="font-weight: bold; text-decoration: none;"> beschrieben</ins>, die das letzte Element einer nicht-leeren Liste zurückgibt. Für alle Listen &lt;code&gt;xs&lt;/code&gt; und Elemente &lt;code&gt;e&lt;/code&gt; gilt: &lt;code&gt;last&amp;nbsp;xs&lt;/code&gt;&amp;nbsp;ergibt&amp;nbsp;&lt;code&gt;e&lt;/code&gt; genau dann, wenn &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt;&amp;nbsp;gleich&amp;nbsp;&lt;code&gt;xs&lt;/code&gt; für eine geeignete Liste &lt;code&gt;ys&lt;/code&gt;. </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Basierend auf dieser Spezifikation können wir mittels logischer Programmiertechniken eine Funktion definieren, die diese erfüllt. Ähnlich wie logische Sprachen bieten funktionallogische Sprachen Lösungen für die Suche nach existentialquantifizierten Variablen. Im Gegensatz zu rein logischen Sprachen unterstützen sie das Lösen von Gleichungen mit funktionalen Teilausdrücken, sodass &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/code&gt; gelöst wird indem &lt;code&gt;ys&lt;/code&gt; mit der Liste &lt;code&gt;[1,&amp;nbsp;2]&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; mit dem Wert &lt;code&gt;3&lt;/code&gt; instantiiert wird. Dann kann &lt;code&gt;last&lt;/code&gt; wie folgt definiert werden:</div></td> </tr> </table> H3xc0d3r https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=178760916&oldid=prev Aka: Tippfehler entfernt, Leerzeichen in Überschrift 2018-06-30T18:39:55Z <p>Tippfehler entfernt, Leerzeichen in Überschrift</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juni 2018, 20:39 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 13:</td> <td colspan="2" class="diff-lineno">Zeile 13:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|pages=499–590}}&lt;/ref&gt; in den Neunzigern. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|pages=499–590}}&lt;/ref&gt; in den Neunzigern. Andere, neuere funktionallogische Programmiersprachen sind [[Curry (Programmiersprache)|Curry]] und [[Mercury (Programmiersprache)|Mercury]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>==Grundlagen==</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>==<ins style="font-weight: bold; text-decoration: none;"> </ins>Grundlagen<ins style="font-weight: bold; text-decoration: none;"> </ins>==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Beispiele sind in der Syntax von [[Curry (Programmiersprache)|Curry]].</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Beispiele sind in der Syntax von [[Curry (Programmiersprache)|Curry]].</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>===Funktionale Programmierung===</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>===<ins style="font-weight: bold; text-decoration: none;"> </ins>Funktionale Programmierung<ins style="font-weight: bold; text-decoration: none;"> </ins>===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein funktionales Programm ist eine Ansammlung von Funktionen oder Regeln. Eine funktionale Berechnung besteht aus dem Ersetzen von Teilausdrücken durch (unter Berücksichtigung der Funktionsdefinition) gleichwertige Teilausdrücke, solange bis keine Ersetzungen bzw. Reduktionen mehr möglich sind und ein Ergebnis bestimmt oder eine [[Normalform]] erreicht wird. Einen Teilausdruck, der reduziert werden kann, wird auch als Redex (von {{EnS|reducible expression|Audio=|IPA=|de=reduzierbarer <del style="font-weight: bold; text-decoration: none;">Ausruck</del>}}) bezeichnet. Für die nächsten Beispiele sei die Funktion &lt;code&gt;verdoppeln&lt;/code&gt; definiert durch</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein funktionales Programm ist eine Ansammlung von Funktionen oder Regeln. Eine funktionale Berechnung besteht aus dem Ersetzen von Teilausdrücken durch (unter Berücksichtigung der Funktionsdefinition) gleichwertige Teilausdrücke, solange bis keine Ersetzungen bzw. Reduktionen mehr möglich sind und ein Ergebnis bestimmt oder eine [[Normalform]] erreicht wird. Einen Teilausdruck, der reduziert werden kann, wird auch als Redex (von {{EnS|reducible expression|Audio=|IPA=|de=reduzierbarer <ins style="font-weight: bold; text-decoration: none;">Ausdruck</ins>}}) bezeichnet. Für die nächsten Beispiele sei die Funktion &lt;code&gt;verdoppeln&lt;/code&gt; definiert durch</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln x &lt;span style="color:green"&gt;'''='''&lt;/span&gt; x &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; x</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> verdoppeln x &lt;span style="color:green"&gt;'''='''&lt;/span&gt; x &lt;span style="color:darkgreen"&gt;'''+'''&lt;/span&gt; x</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 71:</td> <td colspan="2" class="diff-lineno">Zeile 71:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Hier wird das Symbol &lt;code&gt;=:=&lt;/code&gt; für Gleichheitsbedingungen benutzt, um sie syntaktisch von definierenden Gleichheiten und Vergleichen zu unterscheiden. Auf ähnliche Weise können zusätzliche Variablen gebunden indem sie explizit mit &lt;code&gt;where&amp;nbsp;…&amp;nbsp;free&lt;/code&gt; deklariert werden. Die Deklaration ist notwendig und sinnvoll um Tippfehler zu vermeiden. Eine bedingte Gleichung der Form &lt;code&gt;L&amp;nbsp;|&amp;nbsp;B&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;R&lt;/code&gt; kann angewendet werden, falls die Bedingung &lt;code&gt;B&lt;/code&gt; gelöst wurde. Im Gegensatz zu rein funktionalen Sprachen, deren Bedingungen ausschließlich Muster oder Ausdrücke vom Typ &lt;code&gt;Bool&lt;/code&gt; sein können, unterstützen funktionallogische Sprachen außerdem das Lösen von Bedingungen durch das Erraten von Werten der Unbekannten in der Bedingung; Muster-Bedingungen sind ein Spezialfall davon. Einschränkungen, die im Folgenden erklärt werden, werden dafür herangezogen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Hier wird das Symbol &lt;code&gt;=:=&lt;/code&gt; für Gleichheitsbedingungen benutzt, um sie syntaktisch von definierenden Gleichheiten und Vergleichen zu unterscheiden. Auf ähnliche Weise können zusätzliche Variablen gebunden indem sie explizit mit &lt;code&gt;where&amp;nbsp;…&amp;nbsp;free&lt;/code&gt; deklariert werden. Die Deklaration ist notwendig und sinnvoll um Tippfehler zu vermeiden. Eine bedingte Gleichung der Form &lt;code&gt;L&amp;nbsp;|&amp;nbsp;B&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;R&lt;/code&gt; kann angewendet werden, falls die Bedingung &lt;code&gt;B&lt;/code&gt; gelöst wurde. Im Gegensatz zu rein funktionalen Sprachen, deren Bedingungen ausschließlich Muster oder Ausdrücke vom Typ &lt;code&gt;Bool&lt;/code&gt; sein können, unterstützen funktionallogische Sprachen außerdem das Lösen von Bedingungen durch das Erraten von Werten der Unbekannten in der Bedingung; Muster-Bedingungen sind ein Spezialfall davon. Einschränkungen, die im Folgenden erklärt werden, werden dafür herangezogen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>===Einschränkungen===</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>===<ins style="font-weight: bold; text-decoration: none;"> </ins>Einschränkungen<ins style="font-weight: bold; text-decoration: none;"> </ins>===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das Einschränken ist ein Mechanismus, bei dem eine Variable an einen Wert anhand von Alternativen, die von Einschränkungen auferlegt werden, gebunden wird. Alle möglichen Werte werden in einer bestimmten Reihenfolge ausprobiert, wobei der Rest des Programms aufgerufen wird, um die Korrektheit der Bindung zu überprüfen. Einschränkungen sind insofern eine Erweiterung des logischen Programmierens, dass sie eine ähnliche Suche ergeben, jedoch kann sie vielmehr Werte als Teil der Suche erzeugen als lediglich auf das Überprüfen beschränkt zu sein.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das Einschränken ist ein Mechanismus, bei dem eine Variable an einen Wert anhand von Alternativen, die von Einschränkungen auferlegt werden, gebunden wird. Alle möglichen Werte werden in einer bestimmten Reihenfolge ausprobiert, wobei der Rest des Programms aufgerufen wird, um die Korrektheit der Bindung zu überprüfen. Einschränkungen sind insofern eine Erweiterung des logischen Programmierens, dass sie eine ähnliche Suche ergeben, jedoch kann sie vielmehr Werte als Teil der Suche erzeugen als lediglich auf das Überprüfen beschränkt zu sein.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 90:</td> <td colspan="2" class="diff-lineno">Zeile 90:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}}&lt;/ref&gt; bewiesen in den Neunzigern, dass eine bestimmte Strategie, das ''needed narrowing,'' optimal ist mit möglichst wenigen Reduktionen eine Normalform zu erhalten. Needed narrowing ist eine Form von [[Lazy Evaluation|Bedarfsauswertung]], im Gegensatz zur SLD-Auflösungsstrategie&lt;!-- siehe [[:en:SLD resolution|SLD resolution]] (engl. WP) --&gt; von Prolog.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}}&lt;/ref&gt; bewiesen in den Neunzigern, dass eine bestimmte Strategie, das ''needed narrowing,'' optimal ist mit möglichst wenigen Reduktionen eine Normalform zu erhalten. Needed narrowing ist eine Form von [[Lazy Evaluation|Bedarfsauswertung]], im Gegensatz zur SLD-Auflösungsstrategie&lt;!-- siehe [[:en:SLD resolution|SLD resolution]] (engl. WP) --&gt; von Prolog.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>===Funktionale Muster===</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>===<ins style="font-weight: bold; text-decoration: none;"> </ins>Funktionale Muster<ins style="font-weight: bold; text-decoration: none;"> </ins>===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Regel, mit der oben die Funktion &lt;code&gt;last&lt;/code&gt; definiert wurde, zeigt die Tatsache, dass das eigentliche Argument das Ergebnis des Ausdrucks &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt; treffen muss, wobei für &lt;code&gt;ys&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; beliebige Werte eingesetzt werden dürfen. Da auf einer Seite nur ein Parameter vorkommt, kann man das alternativ auch auf eine sehr prägnante Art ausdrücken:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Regel, mit der oben die Funktion &lt;code&gt;last&lt;/code&gt; definiert wurde, zeigt die Tatsache, dass das eigentliche Argument das Ergebnis des Ausdrucks &lt;code&gt;ys&amp;nbsp;++&amp;nbsp;[e]&lt;/code&gt; treffen muss, wobei für &lt;code&gt;ys&lt;/code&gt; und &lt;code&gt;e&lt;/code&gt; beliebige Werte eingesetzt werden dürfen. Da auf einer Seite nur ein Parameter vorkommt, kann man das alternativ auch auf eine sehr prägnante Art ausdrücken:</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 99:</td> <td colspan="2" class="diff-lineno">Zeile 99:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Rein funktionale Sprachen erlauben eine derartige Definition nicht, da das Muster auf der linken Seite eine definierte Funktion enthält (nämlich den Operator &lt;code&gt;++&lt;/code&gt;), die nicht notwendig [[Injektivität|injektiv]] ist; ein solches Muster heißt funktionales Muster.&lt;ref&gt; Sergio Antoy and Michael Hanus: Declarative Programming with Function Patterns, LOPSTR 2005 {{doi|10.1007/11680093_2}}&lt;/ref&gt; Funktionale Muster werden durch die Kombination der funktionalen und logischen Eigenschaften sowie der Unterstützung von einfachen Aufgabendefinitionen, die tiefe Mustervergleiche in hierarchische Strukturen erfordern. In diesem Beispiel ist &lt;code&gt;++&lt;/code&gt; allgemein nicht injektiv, denn jede nicht-leere Liste kann mit &lt;code&gt;[] ++ l&lt;/code&gt; als auch &lt;code&gt;l ++ []&lt;/code&gt; erzeugt werden; jedoch können die freien Variablen hier nur auf eine mögliche Art gewählt werden, da sie Einschränkungen unterliegen.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Rein funktionale Sprachen erlauben eine derartige Definition nicht, da das Muster auf der linken Seite eine definierte Funktion enthält (nämlich den Operator &lt;code&gt;++&lt;/code&gt;), die nicht notwendig [[Injektivität|injektiv]] ist; ein solches Muster heißt funktionales Muster.&lt;ref&gt; Sergio Antoy and Michael Hanus: Declarative Programming with Function Patterns, LOPSTR 2005 {{doi|10.1007/11680093_2}}&lt;/ref&gt; Funktionale Muster werden durch die Kombination der funktionalen und logischen Eigenschaften sowie der Unterstützung von einfachen Aufgabendefinitionen, die tiefe Mustervergleiche in hierarchische Strukturen erfordern. In diesem Beispiel ist &lt;code&gt;++&lt;/code&gt; allgemein nicht injektiv, denn jede nicht-leere Liste kann mit &lt;code&gt;[] ++ l&lt;/code&gt; als auch &lt;code&gt;l ++ []&lt;/code&gt; erzeugt werden; jedoch können die freien Variablen hier nur auf eine mögliche Art gewählt werden, da sie Einschränkungen unterliegen.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>===Nichtdeterminismus===</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>===<ins style="font-weight: bold; text-decoration: none;"> </ins>Nichtdeterminismus<ins style="font-weight: bold; text-decoration: none;"> </ins>===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Da funktionallogische Sprachen in der Lage sind, Funktionsaufrufe mit unbekannten Parametern enthaltende Gleichungen zu lösen, baut das Ausführungssystem auf [[Determinismus (Algorithmus)|nichtdeterministischen]] Berechnungen auf. Dieser Mechanismus ermöglicht auch die Definition von nicht-deterministischen Operationen, die mehrere verschiedene Ergebnisse zu einer gegebenen Eingabe liefern. Die Mutter der nichtdeterministischen Operationen ist der vordefinierte Infix-Operator &lt;code&gt;?&lt;/code&gt;, der Auswahl-Operator, der nichtdeterministisch einen seiner Operanden zurückliefert.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Da funktionallogische Sprachen in der Lage sind, Funktionsaufrufe mit unbekannten Parametern enthaltende Gleichungen zu lösen, baut das Ausführungssystem auf [[Determinismus (Algorithmus)|nichtdeterministischen]] Berechnungen auf. Dieser Mechanismus ermöglicht auch die Definition von nicht-deterministischen Operationen, die mehrere verschiedene Ergebnisse zu einer gegebenen Eingabe liefern. Die Mutter der nichtdeterministischen Operationen ist der vordefinierte Infix-Operator &lt;code&gt;?&lt;/code&gt;, der Auswahl-Operator, der nichtdeterministisch einen seiner Operanden zurückliefert.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 124:</td> <td colspan="2" class="diff-lineno">Zeile 124:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>definiert, die jede Permutation einer gegebenen Liste zurückgibt.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>definiert, die jede Permutation einer gegebenen Liste zurückgibt.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>==Belege==</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>==<ins style="font-weight: bold; text-decoration: none;"> </ins>Belege<ins style="font-weight: bold; text-decoration: none;"> </ins>==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;references/&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;references/&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>==Weblinks==</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>==<ins style="font-weight: bold; text-decoration: none;"> </ins>Weblinks<ins style="font-weight: bold; text-decoration: none;"> </ins>==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://www.informatik.uni-kiel.de/~mh/FLP/ Functional logic programming] an der Universität Kiel</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=178756638&oldid=prev DerSpezialist: /* Grundlagen */ Stilistisch überarbeitet 2018-06-30T15:42:52Z <p><span class="autocomment">Grundlagen: </span> Stilistisch überarbeitet</p> <a href="//de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&amp;diff=178756638&amp;oldid=178748298">Änderungen zeigen</a> DerSpezialist https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=178748298&oldid=prev Mabschaaf: Parameter-Fix 2018-06-30T09:22:18Z <p>Parameter-Fix</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. Juni 2018, 11:22 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 8:</td> <td colspan="2" class="diff-lineno">Zeile 8:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|volume=5 | isbn=0198537921</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|volume=5 | isbn=0198537921</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|series=Handbook of Logic in Artificial Intelligence and Logic Programming</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|series=Handbook of Logic in Artificial Intelligence and Logic Programming</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>|editor=D. M. Gabbay, C. J. Hogger, J. A. Robinson</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor1-first=D. M.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor1-last=Gabbay</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor1-link=Dov Gabbay</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor2-first=C. J.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor2-last=Hogger</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor3-first=J. A.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor3-last=Robinson</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|editor3-link=John Alan Robinson</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|publisher=Oxford University Press</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|publisher=Oxford University Press</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|year=1998</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|year=1998</div></td> </tr> </table> Mabschaaf https://de.wikipedia.org/w/index.php?title=Funktionallogische_Programmierung&diff=176831065&oldid=prev DerSpezialist: /* Einfache Konzepte */ Typographie 2018-04-24T14:18:16Z <p><span class="autocomment">Einfache Konzepte: </span> Typographie</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 24. April 2018, 16:18 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 51:</td> <td colspan="2" class="diff-lineno">Zeile 51:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Kompliziertere Datenstrukturen werden durch rekursive Datentypen dargestellt. Beispielsweise eine Liste über einem beliebigen Typen, deren Elemente ebendiesen Typ haben, ist entweder die leere Liste &lt;code&gt;[]&lt;/code&gt; oder eine nicht-leere Liste mit einem ersten Element &lt;code&gt;x&lt;/code&gt; und einem Restglied &lt;code&gt;xs&lt;/code&gt;, dargestellt durch &lt;code&gt;x : xs&lt;/code&gt;. </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Kompliziertere Datenstrukturen werden durch rekursive Datentypen dargestellt. Beispielsweise eine Liste über einem beliebigen Typen, deren Elemente ebendiesen Typ haben, ist entweder die leere Liste &lt;code&gt;[]&lt;/code&gt; oder eine nicht-leere Liste mit einem ersten Element &lt;code&gt;x&lt;/code&gt; und einem Restglied &lt;code&gt;xs&lt;/code&gt;, dargestellt durch &lt;code&gt;x : xs&lt;/code&gt;. </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"> </del>'''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;[]&lt;/span&gt; &lt;span style="color:darkgreen"&gt;-- [] ist ein parameterloser Konstruktor (d.&amp;nbsp;h. ein Literal), das die leere Liste darstellt.&lt;/span&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"> </ins>'''&lt;span style="color:darkblue"&gt;data&lt;/span&gt;''' &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:green"&gt;'''='''&lt;/span&gt; &lt;span style="color:maroon"&gt;[]&lt;/span&gt; &lt;span style="color:darkgreen"&gt;-- [] ist ein parameterloser Konstruktor (d.&amp;nbsp;h. ein Literal), das die leere Liste darstellt.&lt;/span&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;span style="color:green"&gt;'''|'''&lt;/span&gt; a &lt;span style="color:maroon"&gt;''':'''&lt;/span&gt; &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:darkgreen"&gt;-- Der Konstruktor wird infix notiert und ist der Doppelpunkt.&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;span style="color:green"&gt;'''|'''&lt;/span&gt; a &lt;span style="color:maroon"&gt;''':'''&lt;/span&gt; &lt;span style="color:purple"&gt;List&lt;/span&gt; a &lt;span style="color:darkgreen"&gt;-- Der Konstruktor wird infix notiert und ist der Doppelpunkt.&lt;/span&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;span style="color:darkgreen"&gt;-- Er hat zwei Parameter: ein Listenelement und ein Restglied, welches auch leer sein darf.&lt;/span&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;span style="color:darkgreen"&gt;-- Er hat zwei Parameter: ein Listenelement und ein Restglied, welches auch leer sein darf.&lt;/span&gt;</div></td> </tr> </table> DerSpezialist