Rekursion in prolog (auf Listen)
kann mir bitte jemand helfen nur w/die Grundlagen zur Durchführung rekursive prolog-Funktionen..
append([],X,X). % base
append([X|Y],Z,[X|W]) :- append(Y,Z,W). %recursive
% base case
addup([], 0). % sum of the empty list of numbers is zero
% recursive case: if the base-case rule does not match, this one must:
addup([FirstNumber | RestOfList], Total) :-
addup(RestOfList, TotalOfRest), % add up the numbers in RestOfList
Total is FirstNumber + TotalOfRest.
Kann mir jemand erklären, entweder in Englisch oder in C/C++/Java, was auch immer.. wie die Schritte. Ich eigentlich lieber so etwas wie "Anhängen" oder " reverse.. ich bin meist nur Manipulation von Listen von Variablen statt Integer.. (ich habe versucht, arbeiten durch Anhängen wie 10 mal.. ugh).
InformationsquelleAutor DJPlayer | 2011-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Kostenlose online-Buch "Learn Prolog Now" hat einen Abschnitt gewidmet, um zu erklären, die Schritte, die append führt:
http://cs.union.edu/~striegnk/learn-prolog-now/html/node47.html#ABS.l6.definieren.Anhängen
InformationsquelleAutor Nick Main
append(A, B, R)
bedeutet, dassR
ist das Ergebnis AnhängenA
zuB
.Base case
sagt, dass, wenn
A = []
undB = X
dannR = X = B
: eine leere ListeA
angehängt, um einige der anderen ListeB
gleichB
.Den rekursiven Fall
sagt, dass, wenn
A = [X | Y]
ist eine nicht-leere Liste Anhängen zuB = Z
, und wennW
istY
angehängtZ
, dannR = [X | W]
.Andere Art zu sagen, es ist: zum Anhängen einer nicht-leeren Liste
A
zu einer anderen ListeB
, fügen Sie zuerst den SchwanzA
zuB
und fügen Sie dann den KopfA
auf der Vorderseite der Liste.InformationsquelleAutor antonakos
Wollen Sie sehen es in C++?
Werde ich sofort zugeben, dass dies horridly hässliche C++, aber es ist die direkte übersetzung des Prolog-Programm, mit der Ausnahme, dass die Listen simuliert Verwendung von arrays und einer Tiefe Zähler.
InformationsquelleAutor Fred Foo
Rekursion in prolog ist so ziemlich identisch mit der Rekursion in einer anderen Sprache. Der trick mit dem prolog ist, dass
Dies bedeutet, dass Sie oft brauchen, um zu bauen, was ich nenne "Arbeiter" - Prädikate, die das tun, die eigentliche Arbeit erforderlich ist, und tragen an 1 oder mehreren Variablen, die als Speicher. Hier ist eine Implementierung des Summe-2-Summe einer Liste von ganzen zahlen:
Hier ist eine Implementierung in ANSI-C, die eng spiegeln die oben genannten prolog-code:
InformationsquelleAutor Nicholas Carey