prolog递归堆叠输出

时间:2018-11-29 13:13:05

标签: recursion prolog

我正在尝试学习Prolog,并且正在进行练习以尝试理解递归的工作原理。数据库如下:

directTrain(saarbruecken,dudweiler).
directTrain(forbach,saarbruecken).
directTrain(freyming,forbach).
directTrain(stAvold,freyming).
directTrain(fahlquemont,stAvold).
directTrain(metz,fahlquemont).
directTrain(nancy,metz). 

这是与立即学习Prolog中的练习3.3相同的数据库! 目标是定义一个溯源函数travel / 3,它将为查询travel(nancy,stAvold,X)提供以下输出:

?- travel(nancy,stAvold,X).
           X  =  go(nancy,metz,
                  go(metz,fahlquemont,
                     go(fahlquemont,stAvold)))

这是我到目前为止想出的(我最清晰的代码段):

travel(A, B, X) :-
    directTrain(A, B).
travel(A, B, go(X)) :-
    directTrain(A, Z),
    travel(Z, B, go(A,Z)). 

这确实认识到,当我们找到stAvold的路径时,递归应该停止。但是我真的很难以正确的格式将输出堆叠在go()函数中。我尝试了许多不同的方法,但似乎无法正确解决。坚持了几个小时。如果有人可以提供提示或示例,我将不胜感激。

干杯!

0 个答案:

没有答案