Umsetzung der "For-Schleife" auf prolog
Wie zu Implementieren mit Rekursion und cut-off-Zyklus des Zählers
(wie for i: = 1 downto N do <operator>
) ?
Bitte deutlicher erklären, was Sie wollen, tun, tun.
Wenn Sie das implementieren von Schleifen in Prolog, dann machst du es falsch.
zum Beispiel, wie man diesen code implementiert, der auf strawberry prolog for i:=1 to N do begin i:=i+1; end;
Wenn Sie das implementieren von Schleifen in Prolog, dann machst du es falsch.
zum Beispiel, wie man diesen code implementiert, der auf strawberry prolog for i:=1 to N do begin i:=i+1; end;
InformationsquelleAutor YURIY KOTSOVSKIY | 2011-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist, dass Sie nicht.
Prolog ist eine Beschreibungssprache, keine prozedurale Sprache. Es kommt aus dem Prädikat Kalkül. Beschreiben Sie das problem Raum in Form von Fakten und Regeln ("Datenbank"). Dies bildet eine Sammlung von verbundenen, gerichteten Graphen.
Formulieren Sie eine erste Ziel beschreibt, dass die Lösung für dein "problem" und lassen Sie die ableitungsfunktion finden Sie die Lösung(en), wenn überhaupt.
Die Inferenz-engine beginnt mit dem ersten Ziel, das Sie sich geben. Es wertet Sie in Bezug auf die Datenbank, Wandern auf dem Diagramm, wie es geht, backtracking auf Versagen, bis er eine Lösung gefunden (oder auch nicht). Backtracking in der ersten Ziel verursacht einen look für die nächste Lösung, wenn überhaupt.
So die Vorstellung von einem prozessualen Konstrukt wie eine Schleife ist das eher nicht-idiomatische (um das Mindeste zu sagen), und (meiner Erfahrung nach zumindest) ist so ziemlich eine Garantie für schlechte Leistung.
InformationsquelleAutor Nicholas Carey
meine naive Implementierung, gesehen zu werden als ein erweiterter zwischen/3
Verwendung:
weiteres Beispiel, die einfachste Frage, die @ in diesem Jahr Prolog programming contest:
Erträge
beachten Sie: loop in der zweiten snippet nicht zum ersten...
InformationsquelleAutor CapelliC
Nicholas Carey ist korrekt, in der Beratung, dass Sie denken, deklarativ statt prozedural für Prolog. Allerdings nehme ich die Frage auf so etwas bedeuten wie, "Wie kann ich mithilfe von Prolog zu lösen, eine bestimmte Art von Aufgabe, für die ich mich einsetzen würden, loops in anderen Sprachen: vor allem, wie bekomme ich einige Ergebnisse oder Ergebnisse?" Denn es gibt sicherlich Zeiten, wenn die Arbeit vollständig innerhalb einer deklarativen Sprache, die wir beschreiben möchten, N etwas. Der wesentliche Unterschied wird sein, dass anstatt zu passen, jedes problem in einer Schleife, gibt es verschiedene Möglichkeiten der Lösung dieser Art von Problemen, je nach der Natur des Problems selbst.
twinterer Antwort funktioniert, ist aber beschränkt auf ein Imperativ idiom innerhalb einer bestimmten Sprache.
Hier sind mögliche Lösungen für die drei häufigsten Fälle, geschrieben in Allgemeine, deklarative Prolog-Redewendungen:
Für die zahlen von N bis M verwenden, können Sie das eingebaute Prädikat
between(N,M,Num)
:Für eine Liste mit N Instanzen von X, wir können ein Prädikat wie diese:
Dann, um Ihre Liste:
Dieses Prädikat kann auch verwendet werden, um zu überprüfen, die Länge einer Liste, die enthält bereits ein homogenes element,
Für das durchführen einer Aktion N-mal, wir können so etwas wie dies:
Mehr Informationen über die Arten von looping Verhalten können sein gefunden an der Unterseite von diesem tutorial: http://www.pathwayslms.com/swipltuts/student/index.html
InformationsquelleAutor Shon Feder
In der ECLiPSe-Sprache (das ist im Grunde eine Variante von Prolog) hat eine
do/2
Prädikat, das erstellen von loops. Die Verwendung von Schleifen in Prolog-code ist manchmal nützlich, da es führt zu besser lesbaren code, der auch einfacher zu ändern.Jedoch die
do/2
Prädikat ist in der Tat nur ein makro, das übersetzt wird in ein Rekursives Prädikat, so, dass darunter noch rekursiv:Karten in so etwas wie
(siehe das Papier Logische Schleifen, das gibt auch eine Reihe von Gründen, warum die logische Schleifen vorzuziehen sind Reine Rekursion)
InformationsquelleAutor twinterer
Habe ich geschrieben Dolmetscher für imperative Funktionen in Prolog. Dies ist ein Beispiel für die Verwendung:
und dies ist seine Umsetzung:
InformationsquelleAutor Anderson Green
Einem einfachen code-snippet :
InformationsquelleAutor rashedcs
Gut, habe ich dieses einfache Programm implementiert, dass eine Schleife in Prolog:
Es im Grunde genommen druckt die zahlen von 0 bis 10 (einschließlich).
InformationsquelleAutor Rafael Pontes