在某些条件下汇总列表的元素

时间:2014-12-07 23:35:59

标签: prolog

考虑这种情况:

       height(a,10).
       height(b,20).
       on(a,d).
       on(b,d).

如果 d 上元素的高度总和小于10,我试图编写一个返回true的谓词。

使用:

   ?- findall(X,on(X,d),Result).

我得到:结果= [a,b]

但在此之后我不知道如何实现目标。

1 个答案:

答案 0 :(得分:1)

你需要的是总结所有的高度

?- findall(H,((on(X,d),height(X,H)), Heights).

Heights实例化为[10, 20]表示满意。现在,您需要对该列表中的所有元素求和。在SWI-Prolog中,有一个内置的谓词(sum_list/2):

?- findall(H, (on(X,d), height(X, H)), Heights), sum_list(Heights, S).
S = 30.