我是Prolog的新手。我想實現一個函數來計算列表的大小。例如,我有[[1,2,3],[a,b,c],[12,ab]]
,返回的值應該是8
。所以我有這樣的代碼:如何傳遞參數
size([], _).
size([_|T], X):- X1 is X + 1, size(T, X1).
total_size([], X):- write('size = '), write(X).
total_size([H|T], X):- size(H, X), total_size(T, X).
但我的函數返回0
所有的時間。我的計劃是將X
傳遞給size
函數,並在每次撥打size
時遞增X
的值。查詢是:
?- total_size([[1,2,3],[a,b,c],[12,ab]], 0).
我在做什麼錯?
謝謝你在前進,
科爾內留
PS:我知道我不應該用「功能」附近的「序言」的任何地方。
是的。它們是表達邏輯「關係」的「謂詞」。它們不是「返回」值的「功能」。這不僅僅是一個命名法。 :) – lurker
你也可以這樣做:'total_size(L,X): - flatten(L,LF),length(LF,X).' – lurker
@mbratch:非常感謝。您的解決方案運作良好你想寫一個答案,並獲得獎勵?如果你這樣做,我會將其標記爲解決方案。如果不是,那麼我會回答我自己的問題。 PS:我不關心合法性(謂詞,關係,功能)。那些發明了prolog的人顯然是一羣受虐狂的虐待主義者或虐待狂的受虐狂者,無論你喜歡什麼。 – corneliu