Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 成员/2的代码,带有某种确定性_List_Prolog_Deterministic - Fatal编程技术网

List 成员/2的代码,带有某种确定性

List 成员/2的代码,带有某种确定性,list,prolog,deterministic,List,Prolog,Deterministic,如何对最后一个具有确定性的成员/2进行编码 元素。目前我正在使用: member(X,[X|_]). member(X,[_|Y]) :- member(X,Y). 当我询问以下问题时: ?- member(X,[1,2]). X = 1 ; X = 2 ; No 口译员在返回2后继续搜索 还有一个选择余地。我如何实现成员/2 这样就不会再发生这种事了 但是应该保留member/2的完整语义,即。 答案如下: ?- member(X,Y) Y = [X|_1] ; Y = [_1,X|

如何对最后一个具有确定性的成员/2进行编码 元素。目前我正在使用:

member(X,[X|_]).
member(X,[_|Y]) :- member(X,Y).
当我询问以下问题时:

?- member(X,[1,2]).
X = 1 ;
X = 2 ;
No
口译员在返回2后继续搜索 还有一个选择余地。我如何实现成员/2 这样就不会再发生这种事了

但是应该保留member/2的完整语义,即。 答案如下:

 ?- member(X,Y)
 Y = [X|_1] ;
 Y = [_1,X|_2] ;
 etc..
应该仍然像以前一样工作

再见


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

它会波及到其他谓词。当最后一个元素的成员是确定性的时,使用成员的其他谓词也会变得更具确定性。确定性很好,因为它允许Prolog解释器修剪环境并执行垃圾收集。看起来您可以查看swi pl的member/2,它在最后一个元素上是确定性的。
member(B, [C|A]) :-
    member_(A, B, C).
member_(_, A, A).
member_([C|A], B, _) :-
    member_(A, B, C).