clips - CLIPS LHS 绑定变量
问题描述
我正在尝试编写一个使用迭代深化算法来解决规划问题的 CLIPS 程序。出于同样的原因,我想保持较低的分支因子。
在下面的代码?s
中是代表树级别的变量;我想使用一个规则来进行不同的检查。这就是我试图做的:
(defrule EXPAND::action
(declare (salience ?*load*))
(or
(and ?f1_a <- (status ?s transport ?c1&:(> ?c1 0) ?id1)
?f1_b <- (status ?s city ?q1&:(> ?q1 0) ))
(and ?f2_a <- (status ?s transport ?c2 ?id2)
?f2_b <- (status ?s city ?q2_a ?obj2)
?f2_c <- (status ?s carries ?id2 ?q2_b ?obj2))
(and ?f3_a <- (status ?s transport ?c3 ?id3)
?f3_b <- (status ?s city ?l3_a $?x3)
?f3_c <- (status ?s city ?l3_b $?y3)
?f3_d <- (distance ?l3_a ?d3 ?l3_b ?t3))
(test (neq (str-compare ?l3_a ?l3_b) 0))
)
=>
(if (and (fact-existp ?f1_a) (fact-existp ?f1_b))
then (assert bla1))
(if (and ?f2_a ?f2_b ?f2_c)
then (assert bla2))
(if (and ?f3_a ?f3_b ?f3_c ?f3_d)
then (assert bla3)
))
显然它不起作用。我想使用and
LHS 中单个 's 的布尔值将一些事实断言到规则的 RHS 中。
我怎样才能做到这一点?有任何想法吗?
解决方案
or条件元素通过为规则条件中的每个排列创建单独的规则来工作。每个排列都使用原始规则的动作,因此在规则动作中找到的每个变量都必须存在于每个排列中。
推荐阅读
- css - mPDF 显示 1012 没有 CSS 页面但有 CSS 页面的空页面无法显示页眉和页脚
- html - 当缩小页面而不是相反时,如何在引导程序中将右列放在左列上方?
- postgresql - Postgresql中的to_char函数十六进制格式错误
- python - Python远程记录同一行
- amazon-web-services - 资源处理程序返回消息:“提供的请求无效:网络负载均衡器侦听器不支持规则
- r - 自定义 `geom_` 有两种不同的绘图风格
- javascript - 导航栏品牌中的图像未显示在网页中
- thingsboard - ThingsBoard 社区 - 通过 HTTP API 加速遥测上传
- google-cloud-platform - 如何更改或隐藏 Google Api Gateway 默认响应消息?
- oracle - PLSQL 将字符串动态截断为 varchar2 列大小