prolog - 具有递增分量的动态 Prolog 谓词
问题描述
我有一个由一组规则组成的知识库,当某些条件发生时,每个规则的头部都会执行复杂术语的断言或撤回。
我怎样才能确保Id
每增加一次
assert(term(Id,A,B,C))
?
解决方案
当您为term/3
第一个参数是唯一(整数)标识符的谓词断言子句时,不需要辅助动态谓词来表示当前计数器。你可以简单地做:
:- dynamic(term/3).
assert_term(A, B, C) :-
( term(Id, _, _, _) ->
NextId is Id + 1
; NextId is 1
),
asserta(term(NextId, A, B, C)).
调用asserta/1
将使最新的断言子句term/3
在调用时成为第一个被检索的子句,如上所述,所有参数都未绑定,从而提供对最后计数的访问。然而,该解决方案假定条款没有被任意撤回。
推荐阅读
- c# - 如何使用身份访问 ASP.Net 4.5 中的用户密码?
- android - 当相机尺寸超过 15 兆像素时从手机捕获图像时出现“图像必须调整大小”错误
- java - ExoPlayer:如何根据带宽设置视频质量
- javascript - JavaScript 中的 if else/for 循环
- c++ - 为什么g ++会在未执行的代码处标记转换错误?
- django - 如何使用 Django RESTful 服务使用 POST 方法将值(由用户通过 postmain 提供)存储在变量中
- php - PHP mPDF:无法在 PDF 中显示意第绪语
- php - 用正则表达式确定字符串的结构
- qt - 如何在 Qt 中比较两个 QList 变量
- java - 发现多个文件的操作系统独立路径为“META-INF/androidx.appcompat_appcompat.version”