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

有许多 Prolog 实现支持不同类型的记忆,在 Prolog-lingo 中通常称为 "tabling":, , .