Prolog 是否总是重新评估规则?
Does Prolog always reevaluate rules?
% 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 的某些实现是否更善于知道何时不需要重新评估规则?
% 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 的某些实现是否更善于知道何时不需要重新评估规则?