【问题标题】:Prolog - ASSERT and RETRACTProlog - 断言和撤回
【发布时间】:2010-03-12 19:27:01
【问题描述】:

我想知道,我知道您可以使用 assert 添加事实或规则,或者如果您已将谓词声明为 -:dynamic,则仅允许在该会话中保留所做的更改仅,例如如果关闭 Prolog 窗口,则数据库更改将丢失。

所以我想知道,有没有办法让assertretract 谓词可以对Prolog .pl 文件进行永久更改?

谢谢

【问题讨论】:

    标签: prolog prolog-assert


    【解决方案1】:

    我可以建议你一个非常简单的方法。

    1 ?- assert(a(1)).
    true.
    
    2 ?- assert(a(2)).
    true.
    
    3 ?- assert(a(3)).
    true.
    
    4 ?- a(A).
    A = 1 ;
    A = 2 ;
    A = 3.
    
    5 ?- tell('a_db.txt'), listing(a), told.
    true.
    

    然后关闭会话,重新打开。

    1 ?- a(A).
    ERROR: toplevel: Undefined procedure: a/1 (DWIM could not correct goal)
    2 ?- ['a_db.txt'].
    % a_db.txt compiled 0.00 sec, 516 bytes
    true.
    
    3 ?- a(A).
    A = 1 ;
    A = 2 ;
    A = 3.
    
    4 ?- listing(a).
    :- dynamic a/1.
    
    a(1).
    a(2).
    a(3).
    
    true.
    

    【讨论】:

    • 谢谢,似乎可行,我只是想知道是否可以将 swi 指向特定目录而不是默认目录?当然在使用tell命令时,
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多