2015-11-20 54 views
0

開頭我試圖將所有事實與啓動特定字符集的值進行匹配。例如,說我有不同的人的事實,他們的名字被定義爲一個插槽,我有一個規則需要適用於名字以'd'開頭的每個人。有沒有辦法做到這一點?剪輯模式匹配 - 以

這裏是什麼,我已經試過

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

一個例子星號顯然不是我想要的符號,但有一個符號呢?我瀏覽了谷歌和這個網站,找不到任何東西。

回答

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>