Prolog:将递归谓词放入变量

时间:2018-12-17 00:28:55

标签: list prolog

我是序言的新手,我需要解决以下问题:

编写一个3谓词prereqchain(P,Q,L),给定两个路线P和Q,它在L中返回从P到Q的前提路径上所有步骤的表示。 例如prereqchain(comp085,itec450,L)应该给出答案

L=prerequisite(comp085, comp101, 
prerequisite(comp101, comp281, 
prerequisite(comp281, itec450))).

基本上,知识数据库代表学位课程之间的前提关系。我的主要问题是,如何捕获递归调用跟踪并将其放入变量?另一方面,并​​不是所有的跟踪,因为我只需要用变量替换值的调用即可。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您的基本情况是什么?看起来像这样:

prereqchain(Start, End, prerequisite(Start, End)) :-
    prerequisite(Start, End).

这会给您以下情况:

?- prereqchain(comp281, itec450, L).
L = prerequisite(comp281, itec450).

所以这是您需要的第一件事,现在当您要求prereqchain(comp101, itec450)时会发生什么?您需要一个遵循链其余部分的归纳案例:

prereqchain(Start, End, prerequisite(Start, Middle, Tail)) :-
    prerequisite(Start, Middle),
    prereqchain(Middle, End, Tail).