我是专家系统中的新手,尤其是CLIPS中的新手(也包括英语:-))。
我正在尝试使用复杂的比较谓词在事实中找到一个最大值(某种意义上)。比较谓词被实现为以两个事实作为参数的函数。简而言之,我需要CLIPS来处理所有事实,使用我的谓词进行比较,并返回一个最大的事实。
一种解决方案是使用CLIPS规则评估下一个表达式:
(存在x)而不存在((存在y)(y!= x)和(y> x))
其中“>”代表我的谓词,x和y是事实,例如:
(deftemplate fact (slot name ... ) ... )
(deffunction my-predicate ""
(?fact1 ?fact2)
...
)
(defrule find-max ""
?fact1 <- (fact (name ?name1) )
( not (test (my-predicate ?fact1 (fact (name ?name2 )))))
=>
...
)
Run Code Online (Sandbox Code Playgroud)
但是此示例由于我的谓词函数调用中有关第二个参数的错误消息而无法正常工作。
另一种解决方案是制作中间事实,该中间事实用谓词的比较函数的特定名称和值表示基本事实。但这需要多次迭代才能完成最终结果。
我更喜欢第一种解决方案,但我不知道如何编码。我想我需要在回答像这个问题。所不同的是,我的问题是关于整个事实的比较,而不仅仅是一个狭缝。
是否可以找到一次激活规则的最大值?如果可能,请说明如何。
clips ×1