【发布时间】:2020-06-18 04:41:27
【问题描述】:
我是新的 ti 剪辑,正在尝试编写触发一组规则的规则。 规则的条件是
仅当产品 1 存在时,才计算产品 1、产品 2、产品 3 的产品折扣为 10(强制)。并且产品总数大于等于6个。
(deftemplate Product
(slot productNumber)
(slot quantity))
(defrule sum_of_quantity
(exists (Product (productNumber 1 | 2 | 3)(quantity ?q&:(> ?q 1))))
=>
(bind ?totalQuantity 0)
(do-for-all-facts ((?p Product))
(or (eq ?p:productNumber 1)
(eq ?p:productNumber 2)
(eq ?p:productNumber 3))
(bind ?totalQuantity (+ ?totalQuantity ?p:quantity)))
(if (>= ?totalQuantity 6) then
(printout t "TotalQuantity is " ?totalQuantity "and discoun is 10" crlf)))
(deffacts input1
(Product (productNumber 2)(quantity 3))
(Product (productNumber 3)(quantity 3)))
如图所示输入了事实,即使没有强制性产品,结果也会计算并显示为 10。
建议。
【问题讨论】:
-
这个程序的输出是“TotalQuantity is 6and discoun is 10”。显示的 6 是正确计算的 ?totalQuantity 值。显示的 10 不是计算值;这些字符包含在传递给打印输出命令的字符串中。
-
是的。折扣是一个常数值 10。但产品 1 是强制性产品。因此,即使没有产品 1,也会为其他产品计算总量。如果事实中只有产品 1 可用,我该如何制定触发规则?
-
在规则条件中使用 (productNumber 1) 而不是 (productNumber 1 | 2 | 3)。
-
@GaryRiley :如果您能提供规则的 LHS 可以吗?当我尝试使用(productNumber 1)(productNumber 2 | 3)时。当产品编号为 1 的单个产品时,该规则不会被触发。当产品 1 的事实中存在单个产品时,不计算总数量。当存在 1、2、3、1、2 时,该规则应该起作用或 1,3 存在,以及仅存在产品 1 时。请提出建议。
标签: rules rule-engine clip clips