我正在尝试使用printlist/1
谓词来总结列表中的所有数字但有点被卡住....试图为此提出代码但我不断获得{{1} }。
以下是我的想法:
false
我知道这是错的,这可能是最后一部分。任何帮助表示赞赏!
我这样查询:
printlist([]).
printlist([H|T], Totalsum) :-
print (H+Totalsum),
nl,
printlist(T, Totalsum).
答案 0 :(得分:2)
正如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).
答案 1 :(得分:1)
您定义的不是一个而是两个谓词:printlist/1
和printlist/2
。可能是一个错字。 printlist/2
谓词是递归规则,但没有基本情况。将printlist/1
子句更改为:
printlist([], _).
但您的代码中还有其他错误。提示:Prolog不是一种功能语言。