L
listと numberを取得し、 が listの最長シーケンスの長さであるN
場合に trueになる述語を作成したいと考えています。例えば:N
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
答えは有限ではなく、その後にさらに答えがあります。どうすれば有限の答えを返すことができますか?