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