In Prolog - Programmierung für Künstliche Intelligenz, sagt Bratko folgendes auf Seite 58.Prolog Matching vs miniKanren Vereinigung
„Matching in Prolog entspricht dem, was Vereinigung in der Logik aufgerufen wird jedoch vermeiden wir die Vereinigung Wort, weil passend. B. aus Effizienzgründen in den meisten Prolog-Systemen in einer Weise implementiert, die nicht genau einer Vereinheitlichung entspricht.Eine ordnungsgemäße Vereinheitlichung erfordert die sogenannte Vorkommnis-Prüfung: Tritt eine gegebene Variable in einem gegebenen Term auf? . "
Meine Fragen ist, wenn die Vereinheitlichung in MiniKanren diese Effizienz Strafe leidet oder wie ist dieses Problem gelöst?
"Eine Vereinheitlichung, bei der eine Prüfung erforderlich ist, weist auf einen Programmierfehler hin": Sie könnten zu diesem Punkt noch expliziter sein. Ich muss noch ein gutes praktisches Beispiel für Prolog-Code sehen, der zyklische Ausdrücke benötigt. Kennst du solche Beispiele? –
Eine verwandte Frage: Können Sie realistische Beispiele zeigen oder verlinken? Langsamer? Ich muss zugeben, dass ich nie versucht habe, zyklische Ausdrücke zu verwenden, und einfach die Vanilla-Vereinheitlichung (ohne Vorkommensprüfung) verwendet habe, weil ich angenommen habe, dass es keine Rolle spielt. –
Ich habe einmal eine geniale Anwendung von zyklischen Termen von Stefan Kral gesehen, wo er zyklische Terme benutzte, um das unendliche Band einer Turing-Maschine darzustellen (anfänglich mit '0' gefüllt), beginnend mit 'Tape = [0 | Tape]', und von dort aus fortfahren. Für ein realistisches Beispiel, das hunderte Male schneller arbeitet * mit * tritt ein, siehe Ulrich Neumerkel bei al. "[Deklarative Spracherweiterungen für Prologkurse] (http://www.complang.tuwien.ac.at/ulrich/papers/PDF/2008-fdpe.pdf)". – mat