【问题标题】:Unable to make facts dynamic in SWI-Prolog无法在 SWI-Prolog 中使事实动态化
【发布时间】:2015-06-06 21:39:06
【问题描述】:

我希望能够为location 过程动态撤回和断言事实:

location(egg, duck_pen).

根据在线建议(包括No permission to modify static procedure),我尝试将以下各项添加到我的源代码中,否则仅包含上述断言:

dynamic location/2.
dynamic(location/2).
dynamic(location)/2.

前两个版本在编译时(加载到 SWI-Prolog 时)给我这个错误:

No permission to redefine built-in predicate `(dynamic)/1'
Use :- redefine_system_predicate(+Head) if redefinition is intended

最后一个版本在编译时不会给我一个错误,但是,无论我把它放在文件的开头还是结尾,当我尝试收回我的事实时都会出错:

?- retract(location(egg,duck_pen)).
ERROR: retract/1: No permission to modify static procedure `location/2'

我使用的是 SWI-Prolog 版本 6.6.5。

【问题讨论】:

    标签: prolog prolog-directive-dynamic


    【解决方案1】:

    使用

    :- dynamic location/2.
    
    location(X, Y) blah blah
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      相关资源
      最近更新 更多