我正在尝试将所有事实与一个启动某组字符的值匹配。例如,假设我有不同人的事实,他们的名字被定义为一个插槽,我有一个规则,需要适用于名字以'd'开头的每个人。有没有办法做到这一点?
这是我尝试过的一个例子
(deftemplate person (slot name))
(defrule list-names-starting-with-d
(person (name ?x&d*))
=>
(printout t ?x crlf)
)
星号显然不是我想要的符号,但有一个符号吗?我遍布谷歌和这个网站,找不到任何东西。
答案 0 :(得分:0)
模式不支持用于匹配槽值的正则表达式,但是您可以通过这种方式获得相同的结果:
CLIPS>
(deffunction starts-with (?str1 ?str2)
(eq (str-index ?str1 ?str2) 1))
CLIPS>
(deftemplate person (slot name))
CLIPS>
(defrule list-names-starting-with-d
(person (name ?x&:(starts-with d ?x)))
=>
(printout t ?x crlf))
CLIPS> (assert (person (name fred)))
<Fact-1>
CLIPS> (assert (person (name david)))
<Fact-2>
CLIPS> (assert (person (name ida)))
<Fact-3>
CLIPS> (assert (person (name dean)))
<Fact-4>
CLIPS> (run)
dean
david
CLIPS>