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 如何检查prolog中的列表中是否存在某个模式_List_Prolog - Fatal编程技术网

List 如何检查prolog中的列表中是否存在某个模式

List 如何检查prolog中的列表中是否存在某个模式,list,prolog,List,Prolog,我试图实现一个prolog预测,检查某个模式,比如(x,m)是否存在于列表中,或者m是否存在于列表的最末端,并计算其出现的次数。我从未得到该模式存在次数的答案。为什么 我的尝试是: certainP([_,m],RESULT,W):- W is RESULT+1. certainP([x,m|T],START,RESULT):- RESULT is START+1, START is RESULT, certainP(T,START,RESULT)

我试图实现一个prolog预测,检查某个模式,比如(x,m)是否存在于列表中,或者m是否存在于列表的最末端,并计算其出现的次数。我从未得到该模式存在次数的答案。为什么

我的尝试是:

    certainP([_,m],RESULT,W):-
    W is RESULT+1.
    certainP([x,m|T],START,RESULT):-
    RESULT is START+1,
    START is RESULT,
    certainP(T,START,RESULT).

这应该符合您的描述:

certainP([],N,N).
certainP([_],N,N).
certainP([x,m|T],N,N2) :-
    N1 is N+1,
    certainP(T,N1,N2).
certainP([_|T],N,N2) :-
    certainP(T,N,N2).

这假设中间参数在查询中提供了一个初始数值。

您使用的是什么查询,以及您希望每个查询得到什么结果?@ScottHunter您所说的我使用的查询是什么意思?无论哪种方式,我都希望谓词返回listQueries中x后跟m的次数:键入
certainP(
后面跟什么?你希望发生什么?请举例说明。如果列表的第二个元素不是
m
,则该谓词将失败;如果列表的长度小于2,则该谓词也将失败。@ScottHunter certainP(X,Y,Z),其中X是一个列表,例如[X,m,X,X,X,m,X],Y是总和累加器,因此基本上Y在开始时为零,在结束时Z应等于2,因为这是上面列表中出现“x,m”的次数,所以对于第一对x,m,Z是Y+1。[x,m,m,x,m,x,m,x,m]应输出3