提供的允許值定義在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)))
)
研究生