[英]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.