如何编码对最后一个元素具有确定性的 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..
应该仍然像以前一样工作。
再见