1

如何删除 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 (

你能帮助我吗?

4

1 回答 1

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>    
于 2014-04-06T19:49:03.187 回答