嗯,我有这样的事情:
:- dynamic boxes/2.
boxes([],0).
boxes([2,3,5],5).
boxes([1,4,6],2).
在我的流程中,我根据自己的需要使用assert
和retract
,但在整个过程结束时,我需要知道我有多少框,我怎样才能实现目标?
我真的很感激任何帮助,我非常接近完成它。
答案 0 :(得分:1)
可能有其他方法可以做到这一点,但一种简单的方法如下:
count_boxes(NumberOfBoxes) :-
findall(B, boxes(B, _), L), length(L, NumberOfBoxes).
要包含mat的优秀评论,如果findall
中所有内容都是结果列表的长度,则可以减少findall
调用中的内存消耗,如下所示:
findall(t, boxes(_, _), L)
它不是枚举方框列表B
,而是创建一个长度相同的原子列表t
。