Quellcode Porno – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Quellcode Porno Thu, 10 Sep 15 22:30:54 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649714#m1649714 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649714#m1649714 <p>Habt ihr mal versucht ein Programm zu schreiben, das Sudoku-Puzzle lösen kan? Dann versucht euch mal daran zu erinnern, wie umfangreich der entstandende Quellcode dafür geworden ist, oder nehmt euch jetzt die Zeit darüber nachzudenken, auf wieviele Zeilen ihr es in der Programmiersprache eurer Wahl wohl bringen würdet.</p> <p>Ich habe heute Abend bei einer Fingerübung ein solches Programm in Prolog geschrieben, danach habe ich mich nach anderen Prolog-Lösungen umgesehen und bin auf <a href="http://programmablelife.blogspot.co.at/2012/07/adventures-in-declarative-programming.html" rel="nofollow noopener noreferrer">diesen genialen 15-Zeiler</a> gestoßen. Das haut mich aus den Socken.</p> Quellcode Porno Fri, 11 Sep 15 04:23:52 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649715#m1649715 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649715#m1649715 <p>Tja Alter,</p> <p>da kannste mal sehen, wie dumm so Sprüche sind wie Gibts alles schon, Du erfindest das Rad neu. Btw., auf DeinerRöhre gibts 'zig Videos, wo in jeweils über einer Stunde erklärt wird, wie ein Chat mit WebSocket funktioniert incl. PHP Code.</p> <p>Ich erkläre es Dir in fünf Minuten mit einem Code der lässig auf eine DIN A 4 Seite passt :)</p> <p>Schönes Wochenende,</p> Quellcode-Porno Fri, 11 Sep 15 08:13:01 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649733#m1649733 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649733#m1649733 <blockquote> <p>bin auf <a href="http://programmablelife.blogspot.co.at/2012/07/adventures-in-declarative-programming.html" rel="nofollow noopener noreferrer">diesen genialen 15-Zeiler</a> gestoßen. Das haut mich aus den Socken.</p> </blockquote> <p>Das Programm benutzt eine Bibliothek, die, der Beschreibung nach, nicht einmal zum Standardumfang von Prolog gehört. Ich kann das nicht im Detail bewerten, aber worauf ich hinaus will: Ich baue dir einen Sudoku-Löser in einem Einzeiler, indem ich den ganzen Code in eine Bibliothek stecke.</p> <p>Dein "genial" und Aus-den-Socken-Hauen täte ich insofern streichen und widme mich lieber dem Stotterschreib im Betreff.</p> Sudoku Sat, 12 Sep 15 08:45:15 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649798#m1649798 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649798#m1649798 <p>gudn tach!</p> <blockquote> <p>Habt ihr mal versucht ein Programm zu schreiben, das Sudoku-Puzzle lösen kan?</p> </blockquote> <p>ja, alter hut. schwieriger und interessanter ist es, automatisch zufaellige sudokus zu erstellen, die dann ein mensch loesen koennen soll.</p> <blockquote> <p>Dann versucht euch mal daran zu erinnern, wie umfangreich der entstandende Quellcode dafür geworden ist, oder nehmt euch jetzt die Zeit darüber nachzudenken, auf wieviele Zeilen ihr es in der Programmiersprache eurer Wahl wohl bringen würdet.</p> </blockquote> <p>in perl geht's mit ca. 2 zeilen, siehe <a href="http://blog.davidsingleton.org/sudoku/" rel="nofollow noopener noreferrer">da</a> oder auch <a href="http://codegolf.stackexchange.com/questions/378/implement-a-brute-force-sudoku-solver" rel="nofollow noopener noreferrer">dort</a>.</p> <p>prost</p> <p>seth</p> Quellcode Porno Sun, 13 Sep 15 00:47:33 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649829#m1649829 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649829#m1649829 <p>Aloha ;)</p> <blockquote> <p>Ich habe heute Abend bei einer Fingerübung ein solches Programm in Prolog geschrieben, danach habe ich mich nach anderen Prolog-Lösungen umgesehen und bin auf <a href="http://programmablelife.blogspot.co.at/2012/07/adventures-in-declarative-programming.html" rel="nofollow noopener noreferrer">diesen genialen 15-Zeiler</a> gestoßen. Das haut mich aus den Socken.</p> </blockquote> <p>Ja, nicht schlecht. Bezogen auf die anderen Antworten mag es zwar nicht die kürzeste Lösung sein, hat aber im Vergleich zu noch kürzeren Lösungen noch eine gewisse Lesbarkeit. Das zeigt eben auf, dass das Lösen eines Logikrätsels ein Heimspiel für Prolog ist - denn sowas ist einfach die Kernanwendung deklarativer Programmierung.</p> <p>Die Fingerübung steht mir übrigens auch in Kürze bevor; im Sinne der Prüfungsvorbereitung bezüglich Haskell, Prolog und CHR ;)</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> Quellcode-Porno Fri, 11 Sep 15 09:34:44 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649744#m1649744 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649744#m1649744 <blockquote> <blockquote> <p>bin auf <a href="http://programmablelife.blogspot.co.at/2012/07/adventures-in-declarative-programming.html" rel="nofollow noopener noreferrer">diesen genialen 15-Zeiler</a> gestoßen. Das haut mich aus den Socken.</p> </blockquote> <p>Das Programm benutzt eine Bibliothek, die, der Beschreibung nach, nicht einmal zum Standardumfang von Prolog gehört. Ich kann das nicht im Detail bewerten, aber worauf ich hinaus will: Ich baue dir einen Sudoku-Löser in einem Einzeiler, indem ich den ganzen Code in eine Bibliothek stecke.</p> </blockquote> <p>Berechtigte Kritik, ich möchte das mit zwei Vergleichen einschätzen: Die Funktionen trim() und array_map() aus PHP gehören nicht zum Sprachkern, sondern werden in den String- und Array-Erweiterung respektive definiert. Das DOM gehört nicht zum JavaScript-Kern, es ist trotzdem eine Standard-API in allen Browsern, oder in Spec-Sprech: document ist kein <em>built-in object</em> sondern ein <em>standard object</em>. Auf vergleichbare Art gehört <em>Constraint Logic Programming over Finite Domains</em> nicht zum Prolog-Kern, ist aber Teil von SWI Prolog.</p> Sudoku Mon, 14 Sep 15 16:59:17 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649918#m1649918 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649918#m1649918 <blockquote> <p>ja, alter hut. schwieriger und interessanter ist es, automatisch zufaellige sudokus zu erstellen, die dann ein mensch loesen koennen soll.</p> </blockquote> <p>Jedes wohldefinierte Sudoku-Spielfeld ist im Grunde auch vom Menschen lösbar. Eine Schwierigkeit, die ich beim Menschen vermute, ist es, Spiele zu lösen, die mehrere zulässige Lösungen besitzen. Das sind also Spiele, die durch die vorgegebenen Zahlen nicht bereits eindeutig bestimmt sind.</p> <blockquote> <blockquote> <p>Dann versucht euch mal daran zu erinnern, wie umfangreich der entstandende Quellcode dafür geworden ist, oder nehmt euch jetzt die Zeit darüber nachzudenken, auf wieviele Zeilen ihr es in der Programmiersprache eurer Wahl wohl bringen würdet.</p> </blockquote> <p>in perl geht's mit ca. 2 zeilen, siehe <a href="http://blog.davidsingleton.org/sudoku/" rel="nofollow noopener noreferrer">da</a> oder auch <a href="http://codegolf.stackexchange.com/questions/378/implement-a-brute-force-sudoku-solver" rel="nofollow noopener noreferrer">dort</a>.</p> </blockquote> <p>Definitiv auch cool, ich hätte mir noch gewünscht, dass zu jedem komprmierten Beispiel auch der ursprüngliche Algorithmus in lesbarer Form existierte. So fällt es schwer die Implementierngen zu vergleichen, zum Beispiel bzgl. Laufzeit oder ob die Algorithmen jeweils genau eine Lösung oder alle finden.</p> Quellcode Porno Mon, 14 Sep 15 16:43:55 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649915#m1649915 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649915#m1649915 <blockquote> <p>Ja, nicht schlecht. Bezogen auf die anderen Antworten mag es zwar nicht die kürzeste Lösung sein, hat aber im Vergleich zu noch kürzeren Lösungen noch eine gewisse Lesbarkeit. Das zeigt eben auf, dass das Lösen eines Logikrätsels ein Heimspiel für Prolog ist - denn sowas ist einfach die Kernanwendung deklarativer Programmierung.</p> </blockquote> <p>Schöner Beitrag, allerdings finde ich den Zusammenhang nicht ganz so offensichtlich. Die Bezeichnung stammt ja nicht von den Anwendungsgebieten, die die Entwickler von Prolog im Hinterkopf hatten, sondern von einem Implementierungs-Detail logischer Programmiersprachen, der <em>SLD-Resolution für prädikatenlogische Hornformeln</em> (die übrigens auch nicht rein deklarativ ist). Ebenso erhalten funktionale Programmiersprachen ja nicht ihre Existenzberechtigung, weil in der Welt so viele algebraische Probleme in Funktionsräumen existieren, die man lösen muss, sondern weil die für die Interpreter und Compiler zugrunde liegenden mathematischen Modelle auf dem Lambda-Kalkül aufbauen. Die Anwendungsdomänen erstrecken sich weit darüber hinaus. Aber das ist ideologisches Genörgel und im Grunde gebe ich dir recht, dass Sudoku ein Heimspiel für Prolog ist.</p> <blockquote> <p>Die Fingerübung steht mir übrigens auch in Kürze bevor; im Sinne der Prüfungsvorbereitung bezüglich Haskell, Prolog und CHR ;)</p> </blockquote> <p>Ich hatte die Klausur vor einem Monat und versuche jetzt mein Prolog-Wissen frisch zu haten, weil so viel Eleganz in dem Entwurf steckt. Wenn du noch gutes Lernmaterial gebrauchen kannst, kann ich das Skript meines Professors Jürgen Giesl empfehlen. Die ersten 4 Kapitel beschäftigen sich nur mit den mathematischen Grundlagen, Kapitel 5 von handelt von konzeptionellen Eigenschaften Prologs und Kapitel 6 behandelt Logikprogrammierung mit Constraints. <a href="http://verify.rwth-aachen.de/lp15/skript.pdf" rel="nofollow noopener noreferrer">http://verify.rwth-aachen.de/lp15/skript.pdf</a></p> Quellcode Porno Mon, 14 Sep 15 17:20:51 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649923#m1649923 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649923#m1649923 <p>Aloha ;)</p> <blockquote> <p>Ich hatte die Klausur vor einem Monat und versuche jetzt mein Prolog-Wissen frisch zu haten, weil so viel Eleganz in dem Entwurf steckt. Wenn du noch gutes Lernmaterial gebrauchen kannst, kann ich das Skript meines Professors Jürgen Giesl empfehlen. Die ersten 4 Kapitel beschäftigen sich nur mit den mathematischen Grundlagen, Kapitel 5 von handelt von konzeptionellen Eigenschaften Prologs und Kapitel 6 behandelt Logikprogrammierung mit Constraints. <a href="http://verify.rwth-aachen.de/lp15/skript.pdf" rel="nofollow noopener noreferrer">http://verify.rwth-aachen.de/lp15/skript.pdf</a></p> </blockquote> <p>Ich hab da mehr so das Gesamtpaket abzuliefern; d.h. Haskell, Prolog und CHR/Constraints in einer Vorlesung (2 SWS), also verhältnismäßig knapp (mir übrigens zu knapp, zumal das im Bachelorstudium die einzige nennenswerte Berührung mit nicht-imperativer Programmierung ist). Werde mir das aber gerne mal ansehen ;)</p> <p>Prolog ist sowieso sehr kurz gekommen; die Hälfte des Semesters hatte Haskell für sich und die andere Semesterhälfte teilen sich Prolog und CHR (<a href="https://en.wikipedia.org/wiki/Constraint_Handling_Rules" rel="nofollow noopener noreferrer">Constraint Handling Rules</a>, falls das kein Begriff ist - keine Ahnung wie weit das konkret verbreitet ist) - und da unser Prof. der Erfinder von CHR ist, ist der Prolog-Teil eben doch recht kurz gekommen.</p> <p>Die größte Schwierigkeit ist also, bezogen auf die Prüfung, dass man zwei (beziehungsweise drei) doch sehr unterschiedliche Sprachen hat, die über unterschiedliche Möglichkeiten / built-ins verfügen. Das Umdenken innerhalb einer Prüfung könnte problematisch sein, auch wenn mir Prolog/CHR und Haskell sonst eigentlich ganz gut liegen.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> Quellcode Porno Mon, 14 Sep 15 18:15:05 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649937#m1649937 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649937#m1649937 <p>Hallo,</p> <blockquote> <p>Prolog-Wissen frisch zu haten,</p> </blockquote> <p>schöner freudscher Verschreiber!</p> <p>Gruß<br> Kalk</p> Sudoku Mon, 14 Sep 15 17:16:49 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649922#m1649922 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649922#m1649922 <p>Hallo,</p> <blockquote> <p>Jedes wohldefinierte Sudoku-Spielfeld ist im Grunde auch vom Menschen lösbar. Eine Schwierigkeit, die ich beim Menschen vermute, ist es, Spiele zu lösen, die mehrere zulässige Lösungen besitzen. Das sind also Spiele, die durch die vorgegebenen Zahlen nicht bereits eindeutig bestimmt sind.</p> </blockquote> <p>ich vermute die Haupt-Schwierigkeit woanders, nämlich darin, mehrere Schritte vorauszudenken. Aus demselben Grund gibt es IMO auch viele Menschen, die Schach spielen "können", d.h. die Figuren korrekt nach den Regeln setzen, denen aber der strategische Weitblick fehlt (ich zähle mich da auch dazu).</p> <p>Beim Sudoku ist es am Anfang oft so, dass mehrere Etappenlösungen möglich sind, aber nur eine davon auch bis zum Schluss ohne Widersprüche bleibt. Man muss sich also oft für einen Ansatz entscheiden: "Nehmen wir mal an, hier müsste die 4 stehen." Ein paar Züge weiter führt das in einen Widerspruch, und man muss einige Schritte zurückgehen. Aber wie weit? Und welche Kombinationen hatte man schon, welche noch nicht? Hier den Überblick zu behalten, sehe ich als die eigentliche Herausforderung, und damit tun sich manche Leute sehr schwer.</p> <p>Disclaimer: Ich weiß zwar theoretisch, wie Sudoku geht, habe aber keinen Spaß daran.</p> <p>So long,<br>  Martin</p> Sudoku Mon, 14 Sep 15 21:25:39 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649947#m1649947 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649947#m1649947 <p>gudn tach!</p> <blockquote> <blockquote> <p>schwieriger und interessanter ist es, automatisch zufaellige sudokus zu erstellen, die dann ein mensch loesen koennen soll.</p> </blockquote> <p>Jedes wohldefinierte Sudoku-Spielfeld ist im Grunde auch vom Menschen lösbar. Eine Schwierigkeit, die ich beim Menschen vermute, ist es, Spiele zu lösen, die mehrere zulässige Lösungen besitzen. Das sind also Spiele, die durch die vorgegebenen Zahlen nicht bereits eindeutig bestimmt sind.</p> </blockquote> <p>ein sudoku ist normalerweise loesbar und die loesung ist eindeutig (sonst ist es schwierig, eine musterloesung anzugeben). zudem gibt es verschiedene schwierigkeitsgrade. das alles zu beruecksichtigen, ist gar nicht so leicht. in der <a href="https://de.wikipedia.org/wiki/Sudoku#Erstellung_neuer_Sudokus" rel="nofollow noopener noreferrer">wikipedia</a> stehen ein bissl was zur erstellung.</p> <p>prost</p> <p>seth</p> Sudoku Mon, 14 Sep 15 21:39:46 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649948#m1649948 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649948#m1649948 <blockquote> <blockquote> <p>in perl geht's mit ca. 2 zeilen, siehe <a href="http://blog.davidsingleton.org/sudoku/" rel="nofollow noopener noreferrer">da</a> oder auch <a href="http://codegolf.stackexchange.com/questions/378/implement-a-brute-force-sudoku-solver" rel="nofollow noopener noreferrer">dort</a>.</p> </blockquote> <p>Definitiv auch cool, ich hätte mir noch gewünscht, dass zu jedem komprmierten Beispiel auch der ursprüngliche Algorithmus in lesbarer Form existierte.</p> </blockquote> <p>zu dem perl-beispiel (genauer: dem vorlaeufer des dort genannten) gibt's <a href="https://web.archive.org/web/20100808125045/http://www.ecclestoad.co.uk/blog/2005/06/02/sudoku_solver_in_three_lines_explained.html" rel="nofollow noopener noreferrer">ne erklaerung</a>.</p> <p>prost</p> <p>seth</p> Sudoku Mon, 14 Sep 15 17:25:43 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649924#m1649924 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1649924#m1649924 <blockquote> <p>Beim Sudoku ist es am Anfang oft so, dass mehrere Etappenlösungen möglich sind, aber nur eine davon auch bis zum Schluss ohne Widersprüche bleibt. Man muss sich also oft für einen Ansatz entscheiden: "Nehmen wir mal an, hier müsste die 4 stehen." Ein paar Züge weiter führt das in einen Widerspruch, und man muss einige Schritte zurückgehen. Aber wie weit? Und welche Kombinationen hatte man schon, welche noch nicht? Hier den Überblick zu behalten, sehe ich als die eigentliche Herausforderung, und damit tun sich manche Leute sehr schwer.</p> </blockquote> <p>Stimmt, das beansprucht unsere kognitiven Fähigkeiten noch viel mehr.</p> <blockquote> <p>Disclaimer: Ich weiß zwar theoretisch, wie Sudoku geht, habe aber keinen Spaß daran.</p> </blockquote> <p>Ach du jemine, Sudoku ist auch für mich ein Spiel für die finsterste Langeweile, wenn sämtliche Alternativen ausgeschöpft sind, einschließlich Nichtstun und den Kopf vor die Wand schlagen. Es ist aber wegen seiner Einfachheit eine schöne Programmieraufgabe.</p> Quellcode Porno Thu, 17 Sep 15 13:05:54 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650145#m1650145 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650145#m1650145 <blockquote> <p>Prolog ist sowieso sehr kurz gekommen; die Hälfte des Semesters hatte Haskell für sich und die andere Semesterhälfte teilen sich Prolog und CHR (<a href="https://en.wikipedia.org/wiki/Constraint_Handling_Rules" rel="nofollow noopener noreferrer">Constraint Handling Rules</a>, falls das kein Begriff ist - keine Ahnung wie weit das konkret verbreitet ist) - und da unser Prof. der Erfinder von CHR ist, ist der Prolog-Teil eben doch recht kurz gekommen.</p> </blockquote> <p>CHR war mir bis jetzt kein Begriff, es sieht aber interessant aus und erinnert mich zumindest syntaktisch an lineare Programmierung.</p> Exkurs: CHR Thu, 17 Sep 15 17:47:48 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650153#m1650153 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650153#m1650153 <p>Aloha ;)</p> <blockquote> <blockquote> <p>Prolog ist sowieso sehr kurz gekommen; die Hälfte des Semesters hatte Haskell für sich und die andere Semesterhälfte teilen sich Prolog und CHR (<a href="https://en.wikipedia.org/wiki/Constraint_Handling_Rules" rel="nofollow noopener noreferrer">Constraint Handling Rules</a>, falls das kein Begriff ist - keine Ahnung wie weit das konkret verbreitet ist) - und da unser Prof. der Erfinder von CHR ist, ist der Prolog-Teil eben doch recht kurz gekommen.</p> </blockquote> <p>CHR war mir bis jetzt kein Begriff, es sieht aber interessant aus und erinnert mich zumindest syntaktisch an lineare Programmierung.</p> </blockquote> <p>Grundsätzlich ist CHR keine eigenständig lauffähige Sprache, sondern eine Art "Sprache in der Sprache", d.h. CHR bedient sich einer beliebigen Hostsprache (es gibt Implementierungen für verschiedenste Sprachen).</p> <p>Das Grundkonzept an CHR ist ein dynamischer Constraint-Speicher und der Zustand des Programms bemisst sich dann am Vorhandensein oder nicht-vorhandensein bestimmter Constraints in diesem Speicher. Die elementarste Operation in CHR ist damit das Ablegen eines Constraints im Constraint-Speicher.</p> <p>Die Programmierung findet mithilfe von drei Arten von Regeln statt (die Regeln haben jeweils eine id und können noch Bedingungen, also ein Guard-Statement, haben):</p> <dl> <dt>Simplifizierungsregel</dt> <dd>"<=>"</dd> <dd>Falls bestimmte constraints im Constraint-Speicher liegen, ersetze diese durch andere Constraints</dd> <dd>Prolog-Pseudocode: <code>Regel-ID @ Head-wegwerfen <=> Guard | Body</code></dd> <dt>Propagierungsregel</dt> <dd>"==>"</dd> <dd>Falls bestimmte constraints im Constraint-Speicher liegen, füge diesem weitere Constraints hinzu</dd> <dd>Prolog-Pseudocode: <code>Regel-ID @ Head-behalten ==> Guard | Body</code></dd> <dt>Simpagationsregel</dt> <dd>Mischung aus "<=>" und "==>"</dd> <dd>Falls bestimmte constraints im Constraint-Speicher liegen, entferne einen Teil von diesen constraints und füge dafür neue constraints hinzu</dd> <dd>Prolog-Pseudocode: <code>Regel-ID @ Head-behalten \ Head-wegwerfen <=> Guard | Body</code></dd> </dl> <p>Die Regeln werden alle nacheinander linear angewandt; jedesmal wenn sich der constraint-Speicher verändert werden nochmal alle Regeln angewandt, bis der constraint-Speicher sich nicht mehr verändert (Programmende).</p> <p>Beispiel für ein CHR-Kuchenteigrezept in der Hostsprache Prolog (in swi-prolog lauffähig):</p> <pre><code class="block language-prolog"><span class="token comment">% CHR-Library einbinden</span> <span class="token operator">:-</span> <span class="token function">use_module</span><span class="token punctuation">(</span><span class="token function">library</span><span class="token punctuation">(</span>chr<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">.</span> <span class="token comment">% Deklaration der Constraints mit Anzahl möglicher Parameter</span> <span class="token operator">:-</span> chr_constraint <span class="token function">ei/0</span><span class="token punctuation">,</span><span class="token function">eigelb/0</span><span class="token punctuation">,</span><span class="token function">eiweiss/0</span><span class="token punctuation">,</span><span class="token function">butter/1</span><span class="token punctuation">,</span><span class="token function">puderzucker/1</span><span class="token punctuation">,</span><span class="token function">mehl/1</span><span class="token punctuation">,</span>vanillezucker<span class="token punctuation">,</span><span class="token function">teig/1</span><span class="token operator">.</span> <span class="token comment">% Küchenwerkzeug: Eitrenner - entfernt Ei aus dem Speicher und fügt dafür eigelb und eiweiss hinzu (Simplifizierungsregel)</span> eitrenner <span class="token operator">@</span> ei <span class="token operator"><=></span> eigelb<span class="token punctuation">,</span>eiweiss<span class="token operator">.</span> <span class="token comment">% Küchenwerkzeug: Küchenmaschine - wenn alle Zutaten in ausreichender Menge vorhanden sind, wird daraus der Teig gemischt (Simplifizierungsregel mit Guard)</span> kuechenmaschine <span class="token operator">@</span> <span class="token function">butter</span><span class="token punctuation">(</span>B<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">puderzucker</span><span class="token punctuation">(</span>P<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">mehl</span><span class="token punctuation">(</span>M<span class="token punctuation">)</span><span class="token punctuation">,</span>vanillezucker<span class="token punctuation">,</span>eigelb <span class="token operator"><=></span> B <span class="token operator">>=</span> <span class="token number">200</span><span class="token punctuation">,</span> P <span class="token operator">>=</span> <span class="token number">100</span><span class="token punctuation">,</span> M <span class="token operator">>=</span> <span class="token number">300</span> <span class="token operator">|</span> M1 <span class="token operator">is</span> M <span class="token operator">-</span> <span class="token number">300</span><span class="token punctuation">,</span> B1 <span class="token operator">is</span> B <span class="token operator">-</span> <span class="token number">200</span><span class="token punctuation">,</span> P1 <span class="token operator">is</span> P <span class="token operator">-</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token function">butter</span><span class="token punctuation">(</span>B1<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">puderzucker</span><span class="token punctuation">(</span>P1<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">mehl</span><span class="token punctuation">(</span>M1<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">teig</span><span class="token punctuation">(</span><span class="token number">620</span><span class="token punctuation">)</span><span class="token operator">.</span> <span class="token comment">% Küchenwerkzeug: große Schüssel - darin kann der Teig zusammengefügt werden, wenn er nicht auf einmal in die Küchenmaschine gepasst hat ;) (Simplifizierungsregel)</span> grosse_schuessel <span class="token operator">@</span> <span class="token function">teig</span><span class="token punctuation">(</span>X<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">teig</span><span class="token punctuation">(</span>Y<span class="token punctuation">)</span> <span class="token operator"><=></span> Z <span class="token operator">is</span> Y <span class="token operator">+</span> X<span class="token punctuation">,</span> <span class="token function">teig</span><span class="token punctuation">(</span>Z<span class="token punctuation">)</span><span class="token operator">.</span> </code></pre> <p>Im SWIPL kann das dann z.B. folgendermaßen gestartet werden / ergibt folgende Ausgabe:</p> <pre><code class="block language-prolog"><span class="token comment">% Eingabe - Anfangs-Constraints abspeichern</span> <span class="token operator">?-</span> <span class="token function">butter</span><span class="token punctuation">(</span><span class="token number">500</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">puderzucker</span><span class="token punctuation">(</span><span class="token number">800</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">mehl</span><span class="token punctuation">(</span><span class="token number">600</span><span class="token punctuation">)</span><span class="token punctuation">,</span> vanillezucker<span class="token punctuation">,</span>vanillezucker<span class="token punctuation">,</span> ei<span class="token punctuation">,</span> eigelb<span class="token operator">.</span> eiweiss <span class="token comment">% Ausgabe - Inhalt des Constraint-Speichers nach Programmende</span> <span class="token function">butter</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span> <span class="token function">puderzucker</span><span class="token punctuation">(</span><span class="token number">600</span><span class="token punctuation">)</span> <span class="token function">mehl</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token function">teig</span><span class="token punctuation">(</span><span class="token number">1240</span><span class="token punctuation">)</span> true <span class="token operator">;</span> false<span class="token operator">.</span> </code></pre> <p>Das ist natürlich quasi ein sinnlos-Programm, veranschaulicht aber die Wirkungsweise der Simplifizierungsregel und des Constraint-Speichers ganz gut (und Propagierungsregeln sind ziemlich trivial und Simpagation ist lediglich eine Mischung von beidem).</p> <p>Falls das nicht schon too much war - die Einführung in CHR fand bei uns mit Hilfe einer einzelnen PPP statt, ich war mal so frech und <a href="http://dlc.campingrider.de/self/PDP11.pdf" rel="nofollow noopener noreferrer">hab die bei mir ge-up-t</a>.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div> Exkurs: CHR Fri, 18 Sep 15 15:48:52 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650202#m1650202 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650202#m1650202 <p>Da hab ich mich von der syntaktischen Ähnlichkeit zur linearen Programmierung ja ordentlich hinters Licht führen lassen, denn semantisch lassen sich kaum Gemeinsamkeiten festellen. Zusammen mit den Folien hat mir deine Erklärung aber einen guten ersten Eindruck vermittelt, hört sich an, als wären CHR vor allem für künstliche Intelligenzen eine hervorrande Modellierungsmöglichkeit, lieg ich damit richtig?</p> Exkurs: CHR Fri, 18 Sep 15 16:21:49 Z https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650208#m1650208 https://forum.selfhtml.org/self/2015/sep/11/quellcode-porno/1650208#m1650208 <p>Aloha ;)</p> <blockquote> <p>Da hab ich mich von der syntaktischen Ähnlichkeit zur linearen Programmierung ja ordentlich hinters Licht führen lassen, denn semantisch lassen sich kaum Gemeinsamkeiten festellen. Zusammen mit den Folien hat mir deine Erklärung aber einen guten ersten Eindruck vermittelt, hört sich an, als wären CHR vor allem für künstliche Intelligenzen eine hervorrande Modellierungsmöglichkeit, lieg ich damit richtig?</p> </blockquote> <p>So wie ich es sehe, ja. Insofern haben CHR und Prolog (bzw. Logikprogrammierung im Allgemeinen) schon per se eine gewisse gemeinsame Basis in ihrer Ausrichtung (die Prolog-Implementierung ist auch die "ursprüngliche" Form von CHR). Vorteile von CHR sehe ich vor allem darin, dass man CHR in vielen verschiedenen Hostsprachen nutzen kann und dass die Grundlagen so überschaubar sind. Die Anwendungsmöglichkeiten und Eigenschaften von CHR in verschiedenen Anwendungen sind aber auch aktuelles Forschungsthema; insbesondere auch bei uns in Ulm.</p> <p>Grüße,</p> <p>RIDER</p> <div class="signature">-- <br> Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">eigenen TeamSpeak-Server</a> (fritz.campingrider.de) oder unter: # <a href="http://www.tsviewer.com/index.php?page=ts_viewer&ID=1060332" rel="nofollow noopener noreferrer">Facebook</a> # <a href="https://twitter.com/Camping_RIDER" rel="nofollow noopener noreferrer">Twitter</a> # <a href="http://steamcommunity.com/id/Camping_RIDER" rel="nofollow noopener noreferrer">Steam</a> # <a href="https://www.youtube.com/user/RidersFlame" rel="nofollow noopener noreferrer">YouTube</a> # <a href="http://wiki.selfhtml.org/wiki/Benutzer:Camping_RIDER" rel="nofollow noopener noreferrer">Self-Wiki</a> # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[ </div>