剪辑模式匹配 - 以。开头

时间:2015-11-20 00:59:45

标签: pattern-matching clips

我正在尝试将所有事实与一个启动某组字符的值匹配。例如,假设我有不同人的事实,他们的名字被定义为一个插槽,我有一个规则,需要适用于名字以'd'开头的每个人。有没有办法做到这一点?

这是我尝试过的一个例子

(deftemplate person (slot name))
(defrule list-names-starting-with-d
  (person (name ?x&d*))
  =>
  (printout t ?x crlf)
)

星号显然不是我想要的符号,但有一个符号吗?我遍布谷歌和这个网站,找不到任何东西。

1 个答案:

答案 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>