多级列表中的数字总和 - Prolog

时间:2015-10-12 12:54:12

标签: recursion prolog sum

我想在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
   ).

1 个答案:

答案 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的算术答案。