如何在prolog中添加列的值?

时间:2014-10-31 07:14:21

标签: prolog sum

我有以下规则:

seller(peter,20).    
seller(jose,45).    
...............    
seller(mary,67).    

我想得到卖出的总价值,它将是20 + 45 + .... + 67。

我该怎么做?

提前感谢。

2 个答案:

答案 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有多种模式。