clips - 检查 CLIPS 中的多个事实
问题描述
假设我有一些像这样的事实(我不知道有多少):灯 x 已关闭。通过 derule,我逐步打开所有灯,因此每个事实都将是:灯 x 已打开。如何检查每个亮着的灯。我知道如果有三盏灯我可以写:
(defrule checkAllLamps
(lamp 1 is on)
(lamp 2 is on)
(lamp 3 is on)
=>
(printout t "All lamps are on now")
)
但是对于 x 灯呢?谢谢!
解决方案
您可以为此使用事实集查询函数(基本编程指南12.9.12
的章节)。
(deftemplate lamp
(slot id (type INTEGER))
(slot state (type SYMBOL)))
(defrule all-lamps-are-on
(lamp (state on))
(test (>= (length$ (find-all-facts ((?l lamp)) (eq ?l:state on))) 3))
=>
(printout t "All lamps are on" crlf))
推荐阅读
- javascript - 错误 缺少参数。您必须指定位置。(如何为附近搜索添加监听器)
- swift - 如何使用 ios Swift 停止覆盖 NFC 标签
- java - 如何使用休眠更新 MySQL 数据库中的字段
- c++ - 尝试在 C++ 中的应用程序托盘图标上选中上下文菜单项(WinAPI)
- python - Heroku 上的 Flask API -
- JSONDecodeError:期望值:第 1 行第 1 列(字符 0) - javascript - OpenLayer 6.3.1 在地图上显示 GeoJson 数据的问题
- uart - XC8 中的 UART_Read_Text 问题,图片不接收字符串?
- python - 通过数组执行嵌套循环的更多“Pythonian”方式?
- swift - 理解核心数据,在 SwiftUI 中的视图之间传递数据
- spring - 用于磁盘存储的 ehCache 配置不起作用