在 Prolog 中记忆目标

Gil*_*esz 5 prolog memoization

Prolog 是否可以记住计算目标?

我的意思是说 Prolog 不应该重新计算之前计算过的目标。

因此,例如,对我来说相同的计算是:

goal([first, one], he, she, var(cat, 5)).
goal([first, one], he, she, var(cat, 5)).
Run Code Online (Sandbox Code Playgroud)

但不是

goal([first, one], he, she, var(cat, 6)).
Run Code Online (Sandbox Code Playgroud)

因此,事实上,必须有可能统一这些目标。

mat*_*mat 2

许多 Prolog 系统提供隐式记录此类结果的能力。这称为表格;有关如何启用它的信息,请参阅 Prolog 系统的文档。

Prolog 的一个好处是,您可以轻松地自己构建一个更简单(且功能更弱)的表格变体,例如用于assertz/1存储和加载计算结果。

一个非常简单的实现可能类似于:

:- 动态备忘录_/1。

备忘录(目标):-
    ( memo_(目标) -> true
    ; 目标,
         断言(memo_(目标))
    )。

买者自负...

这当然不是成熟的桌子所能提供的。