你如何删除CLIPS中的一个事实?

时间:2014-04-04 20:37:09

标签: clips fact

如何删除CLIPS中的一个事实?事实将由一个人输入并与存在的基础进行比较,它会删除。

我试过了:

(defrule Deleting::ruleDeleteOneSynSoftgoal "This rule delete one synsoftagoal found in the basis of fact." 
   (declare (salience 42))
   (printout t "Enter below the two softgoals field that want to be deleting:" crlf crlf
             "the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line." crlf crlf)
   (bind ?dsyntype (readline))
   (bind ?dsyntopic (readline))
   ?fact3 <- (synSoftgoal 
   (ttId ?ttId3)
   (syntopic ?syntopic3)      
   (syntype ?syntype3)
   )
   (test (and (eq ?dsyntopic ?syntopic3) (eq ?dsyntype ?syntype3)))
   =>
   (retract ?fact3

)

但是,它显示了这个错误:

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for defrule.

ERROR:
(defrule Deleting::ruleDeleteOneSynSoftgoal "This rule delete one synsoftagoal found in the basis of fact."
   (declare (salience 42))
   (printout t "Enter below the two softgoals field that want to be deleting:" crlf crlf "the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line." crlf crlf)
   (bind ?dsyntype (

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

规则的条件应该用于匹配事实/实例,规则的操作部分是执行打印输出和接收输入等操作的地方。

您可以使用单独的规则来查询用户,使用另一个规则来删除事实,也可以使用事实集查询功能从查询规则中搜索和删除事实。

CLIPS> 
(deftemplate synSoftgoal
   (slot ttId)
   (slot syntopic)
   (slot syntype))
CLIPS>    
(deffacts initial
   (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
   (synSoftgoal (ttId 2) (syntopic "A") (syntype "2"))
   (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
   (synSoftgoal (ttId 4) (syntopic "B") (syntype "2")))
CLIPS>    
(defrule QueryRule 
   => 
   (printout t "Enter below the two softgoals field that want to be deleting:" crlf crlf
             "the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line." crlf crlf)
   (assert (dsyntype (readline)))
   (assert (dsyntopic (readline))))
CLIPS>    
(defrule DeleteRule
   ?fact1 <- (dsyntype ?dsyntype)
   ?fact2 <- (dsyntopic ?dsyntopic)
   ?fact3 <- (synSoftgoal 
                (ttId ?ttId3)
                (syntopic ?dsyntopic)      
                (syntype ?dsyntype))
   =>
   (retract ?fact1 ?fact2 ?fact3))
CLIPS> (reset)
CLIPS> (facts)
f-0     (initial-fact)
f-1     (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
f-2     (synSoftgoal (ttId 2) (syntopic "A") (syntype "2"))
f-3     (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
f-4     (synSoftgoal (ttId 4) (syntopic "B") (syntype "2"))
For a total of 5 facts.
CLIPS> (run)
Enter below the two softgoals field that want to be deleting:

the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line.

2
A
CLIPS> (facts)
f-0     (initial-fact)
f-1     (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
f-3     (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
f-4     (synSoftgoal (ttId 4) (syntopic "B") (syntype "2"))
For a total of 4 facts.
CLIPS> (clear)
CLIPS> 
(deftemplate synSoftgoal
   (slot ttId)
   (slot syntopic)
   (slot syntype))
CLIPS>    
(deffacts initial
   (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
   (synSoftgoal (ttId 2) (syntopic "A") (syntype "2"))
   (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
   (synSoftgoal (ttId 4) (syntopic "B") (syntype "2")))
CLIPS>    
(defrule QueryAndDeleteRule 
   => 
   (printout t "Enter below the two softgoals field that want to be deleting:" crlf crlf
             "the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line." crlf crlf)
   (bind ?dsyntype (readline))
   (bind ?dsyntopic (readline))
   (do-for-all-facts ((?f synSoftgoal)) (and (eq ?f:syntopic ?dsyntopic) (eq ?f:syntype ?dsyntype))
      (retract ?f)))
CLIPS> (reset)  
CLIPS> (facts)
f-0     (initial-fact)
f-1     (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
f-2     (synSoftgoal (ttId 2) (syntopic "A") (syntype "2"))
f-3     (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
f-4     (synSoftgoal (ttId 4) (syntopic "B") (syntype "2"))
For a total of 5 facts.
CLIPS> (run)
Enter below the two softgoals field that want to be deleting:

the synonyms of the <[TYPE]QUALITY ATTRIBUTE> and the <[TOPIC]SUBJECT/OBJECT LAL> need to be entered one per line.

2
A
CLIPS> (facts)
f-0     (initial-fact)
f-1     (synSoftgoal (ttId 1) (syntopic "A") (syntype "1"))
f-3     (synSoftgoal (ttId 3) (syntopic "B") (syntype "1"))
f-4     (synSoftgoal (ttId 4) (syntopic "B") (syntype "2"))
For a total of 4 facts.
CLIPS>