我想获得偶数数字的最大序列的长度,但是我得到了这个错误ERROR: >/2: Arguments are not sufficiently instantiated
。我在线阅读了一些内容,但我无法理解。
示例:
max([2,4,6,7,4,8],R).
R=3
这是我的代码:
max([H|T], L) :- max1(H, 1, T, L).
max1(H,_, [],0):-
H mod 2 =:=1.
max1(H, N, [], N):-
H mod 2 =:=0.
max1(X, N, [H|T], L) :-
X mod 2 =:=0,
M is N+1,
max1(H, M, T, L).
max1(X,N,[H|T],L):-
X mod 2 =:=1,
M>N,
max1(H, 1, T, M).
max1(X,N,[H|T],L):-
X mod 2 =:=1,
N>M,
max1(H,1,T,N).
答案 0 :(得分:1)
在你的上一个谓语max1
中,M
并不意味着什么。在上面的谓词中,您遇到了同样的问题,因为在您比较M>N
时,M
也是未知的。
如果立即使用X
,我也不明白为什么要将您的列表与[H|T]
分离。这简化了程序。
这是一个与累加器一起使用的解决方案。
max(L, R) :-
maxAcc(L, 0, 0, R). % list, currentBest, currentTot, Acc
maxAcc([],_, Best, Best).
maxAcc([H|T],Cur, Best, Acc) :-
H mod 2 =:=0,
CurN is Cur+1,
BestNext is max(CurN,Best),
maxAcc(T, CurN, BestNext, Acc).
maxAcc([H|T],Cur, Best, Acc) :-
H mod 2 =:=1,
BestNext is max(Cur,Best),
maxAcc(T, 0, BestNext, Acc).