首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >剪辑打印出次数规则发射

剪辑打印出次数规则发射
EN

Stack Overflow用户
提问于 2019-01-13 20:52:13
回答 2查看 111关注 0票数 0

下面有下面的CLIPS结构,我想总结一下一个特定规则被触发了多少次,所以输出将是一系列的规则,然后是它们的计数(例如,见图)。

因此,所有这些规则都是遵循的:

温度:(点火次数)秒

压力:(发射次数)秒

代码语言:javascript
复制
(deftemplate oil-measure
  (slot utc-time (type STRING))
  (slot temperature (type INTEGER))
  (slot pressure (type INTEGER)))

(defrule oil-is-hot
  (oil-measure (temperature ?temp) (utc-time ?time))
  (test (> ?temp 32))
  =>
  (printout t ?time tab "temperature:" tab ?temp crlf))

(defrule pressure-is-high
  (oil-measure (pressure ?press&:(> ?press 0)) (utc-time ?time))
  =>
  (printout t ?time tab "pressure:" tab ?press crlf))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-14 10:19:32

您可以将计数器存储在全局变量中并相应地增加它们。

代码语言:javascript
复制
(defglobal ?*hot-oil-times* = 0)

(defrule oil-is-hot
  (oil-measure (temperature ?temp) (utc-time ?time))
  (test (> ?temp 32))
  =>
  (bind ?*hot-oil-times* (+ ?*hot-oil-times* 1))
  (printout t ?time tab "temperature:" tab ?*hot-oil-times* tab ?temp crlf))
票数 1
EN

Stack Overflow用户

发布于 2019-01-15 02:21:49

包含noxdafox解决方案的代码:

代码语言:javascript
复制
(defglobal ?*hot-oil-times* = 0)
(defglobal ?*high-pressure-times* = 0)

(deftemplate oil-measure
  (slot utc-time (type STRING))
  (slot temperature (type INTEGER))
  (slot pressure (type INTEGER)))

(defrule oil-is-hot
  (oil-measure (temperature ?temp) (utc-time ?time))
  (test (> ?temp 32))
  => 
  (bind ?*hot-oil-times* (+ ?*hot-oil-times* 1))
  (printout t ?time tab "temperature:" tab ?*hot-oil-times* tab ?temp crlf))

(defrule pressure-is-high
  (oil-measure (pressure ?press&:(> ?press 0)) (utc-time ?time))
  =>
  (bind ?*high-pressure-times* (+ ?*high-pressure-times* 1))
  (printout t ?time tab "pressure:" tab ?*high-pressure-times* tab ?press crlf))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54173106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档