具有一定决定论的成员/ 2的代码

时间:2011-12-08 19:33:18

标签: list prolog deterministic

如何编写具有最后一个确定性的成员/ 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..

仍然可以正常工作。

再见

1 个答案:

答案 0 :(得分:4)

member(B, [C|A]) :-
    member_(A, B, C).
member_(_, A, A).
member_([C|A], B, _) :-
    member_(A, B, C).

是swi上两个列表调用的结果。