这里我有一个模块列表规则。
module(oop). % Object Oriented Programming
module(se1). % Software Engineering 1
module(se2). % Software Engineering 2
% etc.
然后我定义了每个模块的先决条件。
require(oop, []). % oop is base module. It doesn't require any other modules.
require(se1, [oop]). % se1 requires oop
require(se2, [se1]). % se2 requires se1
如您所见,se2
需要se1(直接)和oop(间接)。
我想定义一个递归遍历列表的函数,并将所有必需的模块作为列表返回。
查询:
?- dependent(se2, L).
预期结果:
L = [se1, oop]
如何使用递归在Prolog中编写从属谓词?
非常感谢你的帮助。
答案 0 :(得分:1)
使用相互递归的一种简单明了的方法:
dependent(X,L):- module(X), require(X,L1), find(L1,L).
find([],[]).
find([H|T],L):-dependent(H,L2),find(T,L3),append([H|L2],L3,L).
示例:
?- dependent(se2,L).
L = [se1, oop].
?- dependent(se1,L).
L = [oop].
?- dependent(oop,L).
L = [].