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

Dynamic 在Prolog中计算动态数据库中的元素,dynamic,prolog,Dynamic,Prolog,嗯,我有一些类似的东西: :- dynamic boxes/2. boxes([],0). boxes([2,3,5],5). boxes([1,4,6],2). 在我的过程中,我根据需要使用assert和retract,但是在整个过程结束时,我需要知道我有多少个框,如何实现我的目标 我非常感谢您的帮助,我很快就要完成了。可能还有其他方法可以做到这一点,但一个简单的方法是: count_boxes(NumberOfBoxes) :- findall(B, boxes(B, _)

嗯,我有一些类似的东西:

 :- dynamic boxes/2.
 boxes([],0).
 boxes([2,3,5],5).
 boxes([1,4,6],2).
在我的过程中,我根据需要使用
assert
retract
,但是在整个过程结束时,我需要知道我有多少个框,如何实现我的目标


我非常感谢您的帮助,我很快就要完成了。

可能还有其他方法可以做到这一点,但一个简单的方法是:

count_boxes(NumberOfBoxes) :-
    findall(B, boxes(B, _), L), length(L, NumberOfBoxes).
findall(t, boxes(_, _), L)
要包含mat的精彩评论,如果您只想在
findall
中显示结果列表的长度,则可以在
findall
调用中减少内存消耗,如下所示:

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

它不是枚举一个框列表,
B
,而是创建一个长度相同的原子列表,
t
findall(B,boxes(B,u),L),length(L,NumberOfBoxes)
也许吧?谢谢!太糟糕了,我可以给你的答案打分,因为它是一条评论,谢谢你这么多潜伏者…你可以用:
findall(
t
),box(u,uu),Ls)
@mat谢谢!我完全忘记了那个方法。