これがあなたの元のアプローチである場合:
CLIPS>
(deftemplate synonymoustype
(slot id)
(slot type)
(slot syntype))
CLIPS>
(deftemplate synonymoustopic
(slot id)
(slot topic)
(slot syntopic))
CLIPS>
(deffacts initial
(synonymoustype (id 1) (type quality) (syntype caliber))
(synonymoustype (id 2) (type quality) (syntype caliber))
(synonymoustype (id 4) (type quality) (syntype character))
(synonymoustype (id 4) (type quality) (syntype linament))
(synonymoustype (id 5) (type quality) (syntype timbre))
(synonymoustopic (id 6) (topic comfort) (syntopic console)))
CLIPS>
(defrule rulesoftgoal
(declare (salience 55))
(synonymoustype
(type ?type)
(syntype ?syntype ))
(synonymoustopic
(topic ?topic)
(syntopic ?syntopic))
=>
(printout t "[" ?type "]" " [" ?topic "]" " [" ?syntype "]" " [" ?syntopic "]" crlf))
CLIPS> (reset)
CLIPS> (run)
[quality] [comfort] [caliber] [console]
[quality] [comfort] [caliber] [console]
[quality] [comfort] [character] [console]
[quality] [comfort] [linament] [console]
[quality] [comfort] [timbre] [console]
CLIPS>
重複が印刷されないようにする方法の 1 つを次に示します。
CLIPS>
(deftemplate synonymoustype
(slot id)
(slot type)
(slot syntype))
CLIPS>
(deftemplate synonymoustopic
(slot id)
(slot topic)
(slot syntopic))
CLIPS>
(deffacts initial
(synonymoustype (id 1) (type quality) (syntype caliber))
(synonymoustype (id 2) (type quality) (syntype caliber))
(synonymoustype (id 4) (type quality) (syntype character))
(synonymoustype (id 4) (type quality) (syntype linament))
(synonymoustype (id 5) (type quality) (syntype timbre))
(synonymoustopic (id 6) (topic comfort) (syntopic console)))
CLIPS>
(defrule rulesoftgoal
(declare (salience 55))
(synonymoustype
(type ?type)
(syntype ?syntype ))
(synonymoustopic
(topic ?topic)
(syntopic ?syntopic))
=>
(assert (print-string (str-cat "[" ?type "]" " [" ?topic "]" " [" ?syntype "]" " [" ?syntopic "]"))))
CLIPS>
(defrule rulesoftgoal-print
?f <- (print-string ?string)
=>
(retract ?f)
(printout t ?string crlf))
CLIPS> (reset)
CLIPS> (run)
[quality] [comfort] [timbre] [console]
[quality] [comfort] [linament] [console]
[quality] [comfort] [character] [console]
[quality] [comfort] [caliber] [console]
CLIPS>
そして、ここに別のものがあります:
CLIPS>
(deftemplate synonymoustype
(slot id)
(slot type)
(slot syntype))
CLIPS>
(deftemplate synonymoustopic
(slot id)
(slot topic)
(slot syntopic))
CLIPS>
(deffacts initial
(synonymoustype (id 1) (type quality) (syntype caliber))
(synonymoustype (id 2) (type quality) (syntype caliber))
(synonymoustype (id 4) (type quality) (syntype character))
(synonymoustype (id 4) (type quality) (syntype linament))
(synonymoustype (id 5) (type quality) (syntype timbre))
(synonymoustopic (id 6) (topic comfort) (syntopic console)))
CLIPS>
(defrule rulesoftgoal
(declare (salience 55))
(synonymoustype
(type ?type)
(syntype ?syntype ))
(synonymoustopic
(topic ?topic)
(syntopic ?syntopic))
(not (already-printed ?type ?topic ?syntype ?syntopic))
=>
(assert (already-printed ?type ?topic ?syntype ?syntopic))
(printout t "[" ?type "]" " [" ?topic "]" " [" ?syntype "]" " [" ?syntopic "]" crlf))
CLIPS> (reset)
CLIPS> (run)
[quality] [comfort] [caliber] [console]
[quality] [comfort] [character] [console]
[quality] [comfort] [linament] [console]
[quality] [comfort] [timbre] [console]
CLIPS>