Wie kann ich Anhängen Listen in Prolog?
Wie kann ich Anhängen Listen in Prolog? Ich habe gesucht im Internet und gefunden habe ich diesen (von http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html)
append([X|Y],Z,[X|W]) :- append(Y,Z,W).
append([],X,X).
So bekommt es die Z
durch das entfernen der Elemente von [X|Y]
im [X|W]
. Aber wie kann ich append von zwei Listen zusammen?
Beispiel,
appendlist([1,2],[3,4,5],X).
Wird das Ergebnis X = [1,2,3,4,5]
.
Weiß ich auch nicht, was passiert in der Rekursion. (Ich verfolgte es aber nicht verstehen)
EDIT: Was ich wissen will ist, wie es sein sollte codiert werden, genau wie die vordefinierten append()
im Prolog.
InformationsquelleAutor der Frage Zik | 2012-07-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code wie du gepostet hast, ist es (fast) OK. Die Reihenfolge der Klauseln muss nur getauscht werden (um dieses Prädikat definition produktiv, wenn in einer generativen Mode):
Diese definiert eine Beziehung zwischen den drei Argumente, sagen wir mal
A
B
undC
.Ihre erste Zeile sagt, "
C
ist das Ergebnis AnhängenA
undB
wennA
undC
sind nicht-leere Listen, Sie haben beide die gleiche Kopf (dh erstes element) und der tail vonC
ist das Ergebnis ist, indem der SchwanzA
mit der gleichen 2. argumentB
".Oder von Links nach rechts:
Darüber nachdenkt, macht es durchaus Sinn. Was es tut, ist, wir definieren wollen, die
append/3
Beziehung, und wir wissen, was wir wollen, es zu sein, so dass wir nur aufschreiben, einige offensichtliche Fakten, die wir wollen, es zu erfüllen, die Gesetze, die er befolgen muss, wenn man so will.Vorausgesetzt, wir haben diesen code bereits für uns definiert, welche Gesetze muss man befolgen? Offenbar Anhängen ein Schwanz von einer Liste mit einer anderen Liste gibt uns ein Schwanz der Folge der Beifügung der vollständigen Liste, 2. Liste.
Dieser legt fest, wie wir "gleiten" in der ersten Liste. Aber was ist, wenn es nirgends mehr zu schieben? Was ist, wenn wir haben erreicht das Ende der Liste? Dann sind wir angekommen an der leeren Liste, und mit dem anfügen einer leeren Liste mit einer anderen Liste gibt uns, die Liste als Resultat. Offensichtlich. Und das ist, was, die 2. Zeile in deinem code ist, der uns sagt, es sagt, "Anhängen einer leere Liste mit einer anderen Liste erzeugt, die eine Liste als Ergebnis".
Erstaunlich, mit aufgeschrieben diese beiden Gesetze, die
append/3
Folgen muss, ist die gleiche wie aufschreiben, die definition selbst.Zusatz: das erklärt sich aus einer deklarativen Sicht; do-check-out eine Antwort von m09die zeigt, dass es mehr von der operativen Sicht.
InformationsquelleAutor der Antwort Will Ness
Sie beantwortet Ihre eigene Frage: Sie verwenden
append/3
.Wenn Sie anfügen möchten
X
undY
und speichern das Ergebnis inZ
Sie tunWenn zum Beispiel
X = [1, 2]
undY = [3, 4, 5]
dannZ
gebunden wird[1, 2, 3, 4, 5]
:InformationsquelleAutor der Antwort aioobe