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)).
所以,事实上,必须有可能统一这些目标。
答案 0 :(得分:2)
许多Prolog系统提供隐式记录此类结果的功能。这称为制表;请参阅Prolog系统有关如何启用它的文档。
Prolog的一个好处是,您可以轻松地构建一个更简单(并且功能更强大)的自我制表变体,使用examlpe assertz/1
来存储和加载计算结果。
一个非常简单的实现看起来类似于:
:- dynamic memo_/1. memo(Goal) :- ( memo_(Goal) -> true ; Goal, assertz(memo_(Goal)) ).
注意事项......
当然,这不是完整的标签会给你的。