Wie können make-Arrays in prolog?
Ich möchte ein array in Prolog. Wie kann es tun? Wie kann der Zugriff auf die Elemente?
- tnx, ich kenne diesen link. und etwas über Listen in prolog, aber ich wollen, etwas zu lernen, wie Arrays in c++ (oder c) mit einem einfachen Beispiel. wenn Sie es haben, bitte teilen. tnx nochmal
- AFAIK ist es nicht möglich ein array im prolog, aber Sie können die Simulation mit einem einfachen Prädikat "Rückkehr" i-te element der Liste, wenn Sie es wirklich brauchen.
- Liste kann für das 8-puzzle-problem??
- tote links.
- gsamaras: so gehen Sie aktiv und buchen Sie selbst!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine 'array' in prolog. Ich meine, können Sie nicht bekommen eine indizierten Liste. Alles, was Sie tun müssen ist, öffnen Sie die Liste so etwas wie ein verlinkten Liste. Du musst es tun, in einem rekursive Weg.
arg/3
Prädikat, das die direkte Indexierung. Bratko gibt erstaunliche-code für das "8-puzzle" (das nehme ich auf meine 8-queens puzzle) mit dieser Technik, und der Schlüssel ist, dass der Wert an einem bestimmten index kann nicht geändert werden, nachdem es wurde zum ersten set.Den stadard-Prolog Weg (evtl. in der Länge begrenzte, nicht-veränderlich) - arrays ist mit
arg/3
Prädikat:Bratko ("Prolog-Programmierung für künstliche Intelligenz") hat den code zu lösen, die klassische 8-queens-problem mit dieser Funktion.
Andere Art und Weise zu emulieren arrays in Prolog ist die Codierung Ihrer Liste als ein binärer Baum, für
O(log(n))
Zugriffszeit.arg/3
ist O(1). Zu wissen, es ist eine gute Abstraktion ist eine Sache, zu wissen, die Abstraktion hat der erwartet, dass die Algorithmische Effizienz ist die andere. 🙂Wenn Sie mit einem Prolog, der hat unbegrenzte Dimension, auf Begriffe, wie SWI-Prolog, die Sie verwenden können, setarg/3 zu emulieren, ein Vektor.
Bitte Lesen Sie die Noten, dass sich der Projektleiter schrieb auf das argument.
Habe ich noch nie genutzt-arrays in Prolog, aber die Beantwortung diese Frage, die ich getestet habe für die Effizienz der Funktionalität. Funktioniert eigentlich ziemlich gut.
setarg
aber eine einfache und standard -arg
tun - das ist viel besser eigentlich - für eine "8-puzzle-problem". Der Schlüssel ist, dass es nicht aktualisiert. (gesehen in Bratko)Yap Prolog hat experimentelle Unterstützung für arrays
Sehen
http://www.dcc.fc.up.pt/~vsc/Yap/Dokumentation.html#Arrays
Können Sie simulieren ein array mit einer binären heap. Aufrufen und ändern eines Elements ist in Theta(log(i)), wobei i der index des Elements, anstelle von Theta(1) für ein array in sagen C.
Arrays sind nicht sehr standardisiert in Prolog. Die erste Frage ist, wie arrays zugeordnet werden soll, Prolog-Datentypen. Eine einfache Lösung ist die Verwendung von verbindungen, die für arrays, und wir können dann mit der ISO-core-standard-Prädikate wie
functor/3
undarg/
3 deklarativ erstellen und Zugriff auf arrays.Verschiedene Formen von arrays sind möglich. Ein einfacher Ansatz ist die Verwendung von Java-multi-dimensionale arrays, die müssen dann nicht homogene Größe. Zum Beispiel ein array in Triangel-Form, wie:
Dargestellt werden können, als diese zwei-level-Prolog-verbindungen:
Ein problem, dass dann Auftritt, ist das fehlen einer array-subscript syntax im ISO-core-standard. Die situation hat sich zuletzt leicht verbessert. Array subscript syntax wurde erstmals von Prolog-Systeme wie ECLiPSe-Prolog, SWI-Prolog und andere.
Hier ist, was ist zum Beispiel möglich, in Jekejeke Prolog, da die kommende Version 1.1.7.
Verwendung von array in standard/2:
Verwendung von Arrays in CLP(FD):
Den oben genannten Verwendung von array-subskript nicht bewerten, das array-argument, und daher nahtlos integriert ist/2. Wenn/2 würde auch versuchen zu avaluate zum ersten argument, es wäre eine Verwechslung zwischen funktoren von auswertbaren Funktionen und funktoren von array-verbindungen.