我们想要构建一个谓词,它获取一个列表L
和一个数字N
,如果N
是 list 的最长序列的长度,则为 true L
。例如:
?- ls([1,2,2,4,4,4,2,3,2],3).
true.
?- ls([1,2,3,2,3,2,1,7,8],3).
false.
为此我建造了 -
head([X|S],X). % head of the list
ls([H|T],N) :- head(T,X),H=X, NN is N-1 , ls(T,NN) . % if the head equal to his following
ls(_,0) :- !. % get seq in length N
ls([H|T],N) :- head(T,X) , not(H=X) ,ls(T,N). % if the head doesn't equal to his following
这个概念很简单 - 检查头部是否等于他的跟随,如果是,则继续尾部并减少N
.
我检查了我的代码,它运行良好(忽略其中的情况N = 1
) -
ls([1,2,2,4,4,4,2,3,2],3).
true ;
false .
但true
答案不是有限的,之后还有更多的答案,我怎样才能让它返回有限的答案?