在 Prolog 中记忆目标
Memoizing goals in Prolog
Prolog 是否可以记忆计算的目标?
我的意思是说 Prolog 不应该重新计算之前计算过的目标。
因此,例如,对我来说相同的计算是:
goal([first, one], he, she, var(cat, 5)).
goal([first, one], he, she, var(cat, 5)).
但不是
goal([first, one], he, she, var(cat, 6)).
所以,事实上,统一这些目标一定是可能的。
许多 Prolog 系统提供隐式 记录此类结果的能力。这叫做开牌;有关如何启用它的信息,请参阅您的 Prolog 系统文档。
Prolog 的一个好处是您可以轻松地自己构建一个更简单(并且功能更弱)的制表变体,例如使用 assertz/1
来存储和加载计算结果。
一个非常简单的实现可能类似于:
:- dynamic memo_/1.
memo(Goal) :-
( memo_(Goal) -> true
; Goal,
assertz(memo_(Goal))
).
买者自负...
这当然不是成熟的表格会给你的。
Prolog 是否可以记忆计算的目标?
我的意思是说 Prolog 不应该重新计算之前计算过的目标。
因此,例如,对我来说相同的计算是:
goal([first, one], he, she, var(cat, 5)).
goal([first, one], he, she, var(cat, 5)).
但不是
goal([first, one], he, she, var(cat, 6)).
所以,事实上,统一这些目标一定是可能的。
许多 Prolog 系统提供隐式 记录此类结果的能力。这叫做开牌;有关如何启用它的信息,请参阅您的 Prolog 系统文档。
Prolog 的一个好处是您可以轻松地自己构建一个更简单(并且功能更弱)的制表变体,例如使用 assertz/1
来存储和加载计算结果。
一个非常简单的实现可能类似于:
:- dynamic memo_/1. memo(Goal) :- ( memo_(Goal) -> true ; Goal, assertz(memo_(Goal)) ).
买者自负...
这当然不是成熟的表格会给你的。