计算Prolog中动态数据库中的元素

时间:2014-09-21 01:16:38

标签: dynamic prolog

嗯,我有这样的事情:

 :- dynamic boxes/2.
 boxes([],0).
 boxes([2,3,5],5).
 boxes([1,4,6],2).

在我的流程中,我根据自己的需要使用assertretract,但在整个过程结束时,我需要知道我有多少,我怎样才能实现目标?

我真的很感激任何帮助,我非常接近完成它。

1 个答案:

答案 0 :(得分:1)

可能有其他方法可以做到这一点,但一种简单的方法如下:

count_boxes(NumberOfBoxes) :-
    findall(B, boxes(B, _), L), length(L, NumberOfBoxes).

要包含mat的优秀评论,如果findall中所有内容都是结果列表的长度,则可以减少findall调用中的内存消耗,如下所示:

findall(t, boxes(_, _), L)

它不是枚举方框列表B,而是创建一个长度相同的原子列表t