prolog中的递归(列表中)

DJP*_*yer 4 prolog

有人可以帮助我只是执行递归prolog函数的基础知识..

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.
Run Code Online (Sandbox Code Playgroud)

有人可以用英语或C/C++/Java解释一下这些步骤.我实际上更愿意看到像追加或反转的东西..我主要只是操纵变量列表而不是整数..(我试图通过追加10次...呃).

ant*_*kos 5

append(A, B, R)意味着R是附加的结果AB.

基本情况

append([], X, X).
Run Code Online (Sandbox Code Playgroud)

说if if A = []B = Xthen R = X = B:A附加到其他列表的空列表B等于B.

递归的情况

append([X | Y], Z, [X | W]) :- append(Y, Z, W).
Run Code Online (Sandbox Code Playgroud)

说,如果A = [X | Y]是一个非空列表追加到B = Z,如果WY追加到Z,然后R = [X | W].

一个非空列表追加:说这是另一种方式A给另一个列表B,首先附加的尾巴AB,然后添加头A到列表的前面.


Nic*_*ain 4

免费的在线书籍“立即学习 Prolog”有一个部分专门解释附加执行的步骤:

http://cs.union.edu/~striegnk/learn-prolog-now/html/node47.html#subsec.l6.defining.append

  • 这是我见过的最好的逐步答案..而且我已经浏览了几本书。在查看痕迹后现在更有意义 (3认同)