考虑这种情况:
height(a,10).
height(b,20).
on(a,d).
on(b,d).
如果 d 上元素的高度总和小于10,我试图编写一个返回true的谓词。
使用:
?- findall(X,on(X,d),Result).
我得到:结果= [a,b]
但在此之后我不知道如何实现目标。
答案 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.