我有以下规则:
seller(peter,20).
seller(jose,45).
...............
seller(mary,67).
我想得到卖出的总价值,它将是20 + 45 + .... + 67。
我该怎么做?
提前感谢。
答案 0 :(得分:1)
库(aggregate),如果没有,可以用all solutions内置替换,比如findall / 3
sum_column_of(Pred, Col, Sum) :-
arg(Col, Pred, ColValue),
findall(ColValue, call(Pred), Values),
sum_list(Values, Sum).
用法:
?- sum_column_of(seller(_,_), 2, T).
T = 132.
请注意,在查询实际谓词之前,将执行一次ColValue绑定,。 我们可以通过独创性来扩展这种模式 进一步过滤和投影。
答案 1 :(得分:0)
数字的基本总和:
?- X is 20 + 45 + 67.
X = 132.
如果您有很多seller/2
个事实或动态断言这些事实,您不希望手动输入所有数字。相反,您希望以算法方式添加参数:
?- use_module(library(aggregate)).
?- aggregate_all(sum(Age), seller(_, Age), SummedAge).
SummedAge = 132.
还有很多其他方法可以做到这一点。例如,plus/3
有多种模式。