【发布时间】:2015-04-30 07:10:41
【问题描述】:
非常感谢您对我的 CLIPS 项目的帮助。
好的,我正在尝试创建一个犬种顾问。 deftemplate 看起来像这样:
(deftemplate breed
(multislot name)
(slot size)
(slot type-owner)
(slot Living_Space)
(slot children)
(slot grooming)
(slot exercise)
(slot noisiness)
(slot trainability)
(slot aggression)
(slot playfulness)
(slot excitability)
(slot score))
deffacts 看起来像这样:
(deffacts dog-breeds
(breed (name Great_Dane)
(size 5)
(type-owner No)
(Living_Space 5)
(children 5)
(grooming 1)
(exercise 4)
(noisiness 2)
(trainability 1)
(aggression 2)
(playfulness 2)
(excitability 3)
(score 0))
所以我写了两种类型的defrules:一种撤回不符合(用户指定)标准的事实,另一种类型在每次事实符合标准时增加“分数”值。只有少数规则收回,所以让增量规则发挥作用对我来说很重要。每个槽的用户输入和标准可以是 1 到 5。
我的问题是:如何在不进入无限循环的情况下更改以下代码?最后我想找出得分最高的事实并显示出来。
(defrule children
(input 1)
?children <- (breed (name ?)(size ?)(type-owner ?)(Living_Space ?) (children 1|2)(grooming ?)(exercise ?)(noisiness ?)
(trainability ?)(aggression ?)(playfulness ?)(excitability ?)(score ?score)
=>
(bind ?sc (+ ?score 1))
(modify ?children (score ?sc))
【问题讨论】:
标签: infinite-loop clips expert-system