我是序言的新手,我需要解决以下问题:
编写一个3谓词prereqchain(P,Q,L),给定两个路线P和Q,它在L中返回从P到Q的前提路径上所有步骤的表示。
例如prereqchain(comp085,itec450,L)
应该给出答案
L=prerequisite(comp085, comp101,
prerequisite(comp101, comp281,
prerequisite(comp281, itec450))).
基本上,知识数据库代表学位课程之间的前提关系。我的主要问题是,如何捕获递归调用跟踪并将其放入变量?另一方面,并不是所有的跟踪,因为我只需要用变量替换值的调用即可。
非常感谢!
答案 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).