% expensiveComp(+A,-Result)
% otherRule(+Arg1,Arg2+,-Result)
% r(+A,+B,C)
r(A,B,C) :-
expensiveComp(A,Result),
otherRule(Result,B,C).
如果多次调用r
且A
具有相同的值expensiveComp
每次调用r
时都必须重新评估,或者在某些情况下Prolog会只是将缓存的值绑定到Result
?
Prolog的某些实现是否更能让他们知道什么时候不需要重新评估规则?
答案 0 :(得分:2)
有许多Prolog实现支持不同类型的memoization,通常在Prolog-lingo中称为“tabling”:where to add,b-prolog,yap。