小编use*_*383的帖子

Prolog findall实施

我的任务是在Prolog中实现一个版本的findall而不使用任何Prolog内置函数,除了not和cut - 所以基本上是纯Prolog.

我正在尝试在树中搜索所有直接后代并将结果返回到列表中

parent(a, b).
parent(b, c).
parent(b, d).
parent(e, d).
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的是:

find(X, L) :- find2(X, [], L).
find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L).
find2(_, Acc, Acc).
Run Code Online (Sandbox Code Playgroud)

我输入的时候想要的是:

find(a,X).
Run Code Online (Sandbox Code Playgroud)

将会:

X = [b, c, d]
Run Code Online (Sandbox Code Playgroud)

(顺序不重要)

但是我得到了:

X = [b, c] ;
X = [b, d] ;
X = [b] ;
X = [].
Run Code Online (Sandbox Code Playgroud)

我是Prolog的新手,所以对此有任何帮助都会非常感激.

谢谢

recursion multithreading list prolog prolog-findall

7
推荐指数
1
解决办法
7094
查看次数

标签 统计

list ×1

multithreading ×1

prolog ×1

prolog-findall ×1

recursion ×1