我是序言新手,正在尝试对列表进行求和,例如:
a(1,2,3).a(2,3,4).a(4,5,6).a(7,8,9).
rule1(SUM):-findall([X,Y,Z],a(X,Y,Z),LIST),sum(LIST,SUM).
我尝试使用 sum(LIST,SUM) 并将返回有关 sum 谓词的未定义错误。
我想创建看起来像 [[1, 2, 3], [2, 3, 4], [4, 5, 6], [7, 8, 9]] 的列表,并添加其中的每个数字,所以总计为 1+2+3+2+3+4+4+5+6+7+8+9
使用 swi-prolog 谓词 findall/3 和 sum_list/2:
?- findall(W, (a(X,Y,Z), W is X+Y+Z), L), sum_list(L, S).
L = [6, 9, 15, 24],
S = 54.
因此,您可以定义:
total(S) :-
findall(W, (a(X,Y,Z), W is X+Y+Z), L),
sum_list(L, S).
并问:
?- total(S).
S = 54.