CLIPS でテンプレートを定義します。
(deftemplate person
(slot name)
(slot sex)
(slot gender (allowed-values male female))
(multislot children))
未知の人物の作成から始めます (注意: 存在するかどうかを確認せずに人物を作成するため、これは完全に正しいとは限りません)。
(defrule childrencataloguer "First layer of unknown person resolution"
(person (children $?ch))
=>
(progn$ (?term ?ch)
(assert (unknown-person ?term))
))
上記の警告に対処する
(defrule removeunknownswithpersonsalready
(person (name ?n))
?up <-(unknown-person ?n)
=>
(retract ?up))
次に、性別を取得します。
(defrule getgender
?up-nogen <-(unknown-person ?n)
=>
(retract ?up-nogen)
(printout t crlf "Please enter male or female to indicate " ?n "'s gender" crlf )
(assert (unknown-person ?n (read)))
)
性別の確認を行う方法は他にもあります。許可された値が検証に入力されるように、deftemplate 自体を使用したいと思います。しかし、方法はまだわかりません。
(assert (gender male))
(assert (gender female))
次に、検証を行います。
(defrule checkgender
?p <- (unknown-person ?n ?s)
(not (gender ?s))
=>
(retract ?p)
(assert (unknown-person ?n))
)
ついにアンノウン卒業
(defrule graduatefromunknown
(declare (salience -10))
?up <- (unknown-person ?n ?s)
=>
(retract ?up)
(assert (person (name ?n) (sex ?s)))
)