Prolog可以解释一下这个递归

时间:2016-10-29 22:12:37

标签: prolog

有人可以解释以下Prolog递归是如何工作的吗?

findRoute(A,A,_).
findRoute(A,C,Path) :- 
    nextCnvZone(A,B),
    \+ member(B,Path), 
    findRoute(B,C,[B|Path]).

我能理解第二部分,但无法理解第一部分,即第一部分findRoute(A,A,_).在做什么?

1 个答案:

答案 0 :(得分:1)

它是停止递归的部分,即当第一个参数等于递归停止的第二个参数时,如果它到达那个级别,则返回true到所有递归级别。

通常,它具有第一个参数等于第二个参数的规则。 (如果给出了两个变量,检查是否为真,如果第二个变量是第一个,那么将第二个值赋给第一个,等等。)

?- findRoute(1, 1, 5).
true
?- findRoute(1, 2, 5).
false
?- findRoute(1, X, 5).
X = 1
?- findRoute(X, 2, 5).
X = 2