Prolog-Iteration durch Liste
Sagen wir, ich habe die Liste Xs = [a,b,c].
Jetzt möchte ich zum iterieren durch alle Elemente und rufen Sie eine andere Funktion für diese Elemente. Meine Frage ist: wie tun Sie dies, indem Sie den Kopf und Schwanz? Ich wäre für Hilfe dankbar.
Für eine Sache, die map ist dein Freund
Wenn Sie die Einschränkung entfernen von
Wenn Sie die Einschränkung entfernen von
head
und tail
, die Sie tun können, Durchlaufen die Liste der Elemente einfach durch die Verwendung fail
und Disjunktion: member(X, [1,2,3,4]), writeln(X), fail; true.
wird, drucken Sie die Liste Elemente, eins nach dem anderen und das Ziel erfolgreich sein wird.InformationsquelleAutor Dago | 2015-06-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel, Sie nicht Durchlaufen in Prolog. Stattdessen schreiben Sie in der Regel mit ein paar rekursiven Klauseln, wie diese:
Die erste Klausel Prozesse die Basis Fall, wenn die Liste
[]
leer ist. In diesem Fall, es gibt nichts zu tun, so dass der Körper der Regel leer ist als gut.Die zweite Klausel Prozesse der Fall, wenn Ihre Liste hat mindestens ein element. Syntax
[H|T]
vereint mit Ihrer Liste in der Weise, dassH
wird der Kopf der Liste, undT
wird sein Schwanz. Zum Beispiel, wenn Siedosomething([a,b,c])
,H
wirda
, undT
wird[b,c]
.Den Körper von dieser Regel besteht aus zwei teilen. Der erste Teil funktioniert auf den Kopf, beschimpfte
process
. Dies ist die Regel, die Sie ausgeführt werden sollen für jedes element der Liste. Der zweite Teil ruftdosomething
Regel rekursiv auf den Schwanz der Liste. Wenn der tail-Liste nicht leer ist, wird die zweite Klausel vondosomething
vereinen würde mit der kürzeren Liste, um die Verarbeitung fortzusetzen. Wenn der Schwanz leer ist, die erste Klausel vereinen würde, so endet die Verarbeitung.maplist(process, [a,b,c])
undmaplist/3
,maplist/4
...Sie haben absolut Recht. Jedoch, der OP wollte wissen, "wie Sie dies tun, indem Sie Kopf und Schwanz", so erklärte ich den 1970er Jahren Weg, es zu tun. Ich denke, dass solides Verständnis dieses einfachen code-snippet ist sehr wichtig für das Verständnis der Prolog ist Weg, Dinge zu tun. Natürlich Prolog Praktiker schnell entdecken
maplist/2
, und Sie gehen nie zurück .Zwar sollten wir beantworten hier die Fragen gestellt, diese Fragen enthalten oft Teile, die besser ignoriert.
InformationsquelleAutor dasblinkenlight