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谢谢!我完全忘记了那个方法。