Как я могу закодировать member/2, у которого есть детерминизм для последнего элемента. В настоящее время я использую:
member(X,[X|_]).
member(X,[_|Y]) :- member(X,Y).
Когда я запрашиваю следующее:
?- member(X,[1,2]).
X = 1 ;
X = 2 ;
No
Интерпретатор продолжает поиск после возврата 2, так как еще остается точка выбора. Как мне реализовать member/2, чтобы этого больше не происходило?
Но должна быть сохранена полная семантика member/2, т.е. такие ответы, как:
?- member(X,Y)
Y = [X|_1] ;
Y = [_1,X|_2] ;
etc..
Должен работать как прежде.
Пока