我想在prolog中编写一个谓词,它将多级列表中所有级别的数字相加。我收到错误:Arithmetic: deepSumList(_G5686,_G5697) is not a function
。
代码如下:
deepSumList([],0).
deepSumList([H|T],Sum) :-
( is_list(H),
deepSumList(T,X),
Sum is X + deepSumList(H,Sum)
; deepSumList(T,X),
Sum is H + X
).
答案 0 :(得分:1)
所以给出更多解释:
Prolog始终根据它的KB检查某些内容是否被视为TRUE 。所以Sum is X + deepSumList(H,Sum)
更像是Java / Prolog组合。你问Prolog是否可以通过X + deepSumList(H,Sum)
来实例化Sum。并且它不知道这一点,因为它不知道如何处理最后一部分。
更好的是:
deepSumList(H, SumDeep), Sum is X + SumDeep
首先,您通过递归使Prolog为SumDeep
分配'更深层列表的总和',然后将Sum
分配给X + SumDeep
的算术答案。