SUM 在 PROLOG 中列出成员

问题描述 投票:0回答:1

我是序言新手,正在尝试对列表进行求和,例如:

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

prolog swi-prolog
1个回答
0
投票

使用 swi-prolog 谓词 findall/3sum_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.
© www.soinside.com 2019 - 2024. All rights reserved.