2015-11-24 26 views
0

我想獲得最大偶數序列的長度,但是我得到這個錯誤ERROR: >/2: Arguments are not sufficiently instantiated。我在網上閱讀了一些內容,但我無法理解。錯誤:>/2:參數沒有被充分實例化

例子:

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). 

回答

1

在你最後的謂詞max1M沒有任何意義。而在上面的謂詞中,你有同樣的問題,因爲在你比較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). 
相關問題