Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 序言:递归获取所有列表元素_List_Recursion_Prolog - Fatal编程技术网

List 序言:递归获取所有列表元素

List 序言:递归获取所有列表元素,list,recursion,prolog,List,Recursion,Prolog,这里我有一个规则模块列表 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, [o

这里我有一个规则模块列表

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中编写依赖谓词


非常感谢您的帮助。

使用交互递归的一种简单明了的方法:

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 = [].
如何编写依赖函数
:Prolog没有函数,只有谓词。。。