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