[英]Using the printlist/1 predicate in Prolog to sum up all numbers in a list
我想使用printlist/1
謂詞來總結所有清單,但那種被困人數....試圖想出這個代碼,但我不斷收到false
。
這是我想出的:
printlist([]).
printlist([H|T], Totalsum) :-
print (H+Totalsum),
nl,
printlist(T, Totalsum).
我知道這是錯誤的,可能是最后一部分。 任何幫助表示贊賞!
我這樣查詢:
?- printlist([1,2,3]).
false.
正如Paulo所說,您在此處定義兩個謂詞,這是不正確的。
解決方法如下:
printlist([], 0).
printlist([H|T], Sum) :-
printlist(T, Subsum),
Sum is Subsum + H.
查詢樣例:
?- printlist([1,2,3,5], L).
L = 11.
@ Paulo要求),尾遞歸版本:
printlist(L, Sum) :-
sumac(L, 0, Sum).
sumac([], Acc, Acc).
sumac([H|T], Acc, Sum) :-
Nacc is Acc + H,
sumac(T, Nacc, Sum).
您定義的不是一個謂詞,而是兩個謂詞: printlist/1
和printlist/2
。 可能是錯字。 printlist/2
謂詞是一個遞歸規則,但沒有基本情況。 將printlist/1
子句更改為:
printlist([], _).
但是您的代碼中還有其他錯誤。 提示:Prolog不是功能語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.