Реализация findall в Prolog

Мне было поручено реализовать версию findall в Prolog без использования каких-либо встроенных модулей Prolog, кроме not и cut - так что в основном в чистом 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, поэтому я буду благодарен за любую помощь по этому поводу.

Спасибо

7
задан Transfinite Numbers 1 July 2016 в 20:42
поделиться