如何编写具有最后一个确定性的成员/ 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..
仍然可以正常工作。
再见
答案 0 :(得分:4)
member(B, [C|A]) :-
member_(A, B, C).
member_(_, A, A).
member_([C|A], B, _) :-
member_(A, B, C).
是swi上两个列表调用的结果。