由於某種原因,這不起作用。我越來越: 錯誤:是/ 2:論點是沒有充分實例化在列表中添加整數
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
我想添加一個列表(僅包含數字)的內容。
由於某種原因,這不起作用。我越來越: 錯誤:是/ 2:論點是沒有充分實例化在列表中添加整數
1 add_list([]).
2 add_list([H|T]):-
3 Sum2 is Sum1 + H,
4 add_list(T).
我想添加一個列表(僅包含數字)的內容。
我不確定你在做什麼。但是,如果你正在嘗試calc下總和會是這個樣子(更名爲list_sum作爲add_list沒有任何意義):
list_sum([], 0).
list_sum([H|T], Sum):-
list_sum(T, SubSum),
Sum is SubSum + H.
另外,您也可以使用蓄能器(優點是,它是尾遞歸,因此可以優化)
list_sum(L,R) :- list_sum(L,0,R).
list_sum([],A,A).
list_sum([H|T],A,R) :- A1 is A + H, list_sum(T,A1,R).
你可以有一個「functionnal記」與與foldl:
foldl(_P, [], V, V).
foldl(P, [H|T], V1, VF) :-
call(P, H, V1, V2),
foldl(P, T, V2, VF).
sum_list(L, S) :-
foldl(add, L, 0, S).
add(X, Y, Z) :-
Z is X+Y.
s(X)以獲得更高的順序! – repeat
謝謝,這是我一直想把你了。但我認爲我對序言中的遞歸有點困惑。 list_sum([],0)。這是基本情況嗎?並且因爲列表中沒有剩餘元素而實現了0? –
拳頭線是「事實」。第二行是「規則」。你必須達到規則的事實。我知道這有點奇怪,但你應該閱讀更多的序言(例如http://en.wikipedia.org/wiki/Prolog) –