簡體   English   中英

使用Prolog中的printlist / 1謂詞對列表中的所有數字求和

[英]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/1printlist/2 可能是錯字。 printlist/2謂詞是一個遞歸規則,但沒有基本情況。 printlist/1子句更改為:

printlist([], _).

但是您的代碼中還有其他錯誤。 提示:Prolog不是功能語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM