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).