在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的一个好处是,你可以轻松地构建一个更简单(并且功能更强大)的自我制表变体,使用examlpe assertz / 1来存储和加载计算结果.

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

:- dynamic memo_/1.

memo(Goal) :-
    (    memo_(Goal) -> true
    ;    Goal,
         assertz(memo_(Goal))
    ).

买者自负…

那当然不是那些成熟的表格会给你的.

点赞