【问题标题】:Unpredictable dynamic predicate behaviour不可预测的动态谓词行为
【发布时间】:2013-04-27 20:41:54
【问题描述】:

我有一个问题,需要我将元素添加到分布在各种谓词中的列表中。我选择使用动态列表谓词,而不是通过基于参数的列表。我简单的例子可以在下面看到。当我最初使用它时它工作得很好,但是现在如果我使用任何参数作为 X,即使在关闭程序并重新编译之后,它也会继续从列表中检索以前的参数数据。有人知道这是怎么回事吗?

//list declarations
:- dynamic listD/1.
listD([]).

//pushes X onto the list then retrieves the entire list for verification
sample(X):-
    assert(listD(X)),
    listD(Y),
    write(Y).


Example usage

sample([adam]).
//prints adam fine
sample([fred]).
//prints adam again

【问题讨论】:

  • 花时间学习正确的 Prolog:尽可能避免断言
  • 我的回答有帮助吗?还有什么不清楚的吗?

标签: list prolog prolog-assert prolog-directive-dynamic


【解决方案1】:

启动时使用retractall清理状态。

sample(X):-
    retractall(listD(_)),
    assert(listD(X)),
    listD(Y),
    write(Y).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多