假设为您提供了一组根据以下构造定义的“person”事实:
(deftemplate person (slot name) (slot sex) (allowed-values male female) (multislot children))编写规则执行以下操作:
您的规则应该进行数据验证,以确保用户只提供允许的值。
发布于 2013-05-15 14:34:18
在剪辑中定义模板:
(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)))
)还有其他的方法,你可以做性别确认,我本来希望使用反模板本身,以便允许的-值将输入到验证。但我不知道是怎么回事。
(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)))
)https://stackoverflow.com/questions/16567948
复制相似问题