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