评估条款开头的表达式

时间:2017-12-25 03:17:23

标签: prolog

有没有办法在findall/3子句中评估这个总和?

findall((A+C,[M,H|_]),(b_to_b(H,M,C),\+ member(M,[H|T])),R).

在这里,我获得了(1+3,List)之类的值,我正在寻找一些快捷方式,以便获得价值4而不是(1+3)

我明白问题是什么,但快捷方式会很好,否则我必须重新访问整个列表,这不是很好。

由于

1 个答案:

答案 0 :(得分:3)

假设A已经绑定到数字,只需将评估从模板移动到目标:

...,
findall((S,[M,H|_]),(b_to_b(H,M,C),\+ member(M,[H|T]), S is A+C),R).

效率提示:您还应将member / 2更改为memberchk / 2.