Prolog总是重新评估规则吗?

Prolog总是重新评估规则吗?,prolog,b-prolog,yap,xsb,Prolog,B Prolog,Yap,Xsb,如果使用A的相同值多次调用r,那么expensiveComp是否必须在每次调用r时重新计算,或者是否存在Prolog仅将缓存值绑定到结果的情况 Prolog的一些实现是否能够更好地知道何时不需要重新评估规则?有许多Prolog实现支持不同类型的记忆,在Prolog行话中通常称为“tabling:,。您可能会有副作用,因此通常无法假设或证明,规则可以自动记忆。@coredump所以Prolog的任何实现都不会尝试确定规则是否可以安全记忆?我刚刚发现了这个,这与您的问题有关。我不知道有任何Prolo

如果使用
A
的相同值多次调用
r
,那么
expensiveComp
是否必须在每次调用
r
时重新计算,或者是否存在Prolog仅将缓存值绑定到
结果的情况


Prolog的一些实现是否能够更好地知道何时不需要重新评估规则?

有许多Prolog实现支持不同类型的记忆,在Prolog行话中通常称为“tabling:,。

您可能会有副作用,因此通常无法假设或证明,规则可以自动记忆。@coredump所以Prolog的任何实现都不会尝试确定规则是否可以安全记忆?我刚刚发现了这个,这与您的问题有关。我不知道有任何Prolog系统默认启用了记忆功能。
% expensiveComp(+A,-Result)
% otherRule(+Arg1,Arg2+,-Result)
% r(+A,+B,C)
r(A,B,C) :-
  expensiveComp(A,Result),
  otherRule(Result,B,C).