我的任务是在 Prolog 中实现 findall 的一个版本,除了 not 和 cut 之外,不使用任何 Prolog 内置函数 - 所以基本上是在纯 Prolog 中。
我正在尝试在树中搜索所有直系后代并在列表中返回结果
parent(a, b).
parent(b, c).
parent(b, d).
parent(e, d).
到目前为止我所拥有的是:
find(X, L) :- find2(X, [], L).
find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L).
find2(_, Acc, Acc).
例如,当我输入时我想要得到什么:
find(a,X).
将会:
X = [b, c, d]
(顺序不重要)
然而我得到的是:
X = [b, c] ;
X = [b, d] ;
X = [b] ;
X = [].
我是 Prolog 新手,因此我们将不胜感激。
Thanks