我的任务是在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的新手,所以对此有任何帮助都会非常感激.
谢谢