如何通过 Jess 中的规则添加事实?
How to add facts through rules in Jess?
我尝试阅读有关 Jess 的教程,但找不到任何有用的内容。我想构建一个程序来找出我在说的是哪种乐器。
因此,如果乐器有弦乐,我们就知道该乐器属于弦乐或打击乐器(即钢琴)类别。我将如何编写一条规则来保存一个事实,说明类别是基于此标准的打击乐或弦乐?
我考虑过绑定,但绑定并不意味着我必须为每个潜在类别设置一个单独的变量?或者,我应该使用断言吗?
这演示了如何从规则中插入事实以存储一组可能的类别。
(deftemplate Instrument (slot strings))
(deftemplate Classification (multislot category))
(defrule cat-by-strings
?i <- (Instrument (strings ?s&:(> ?s 0)))
=>
(assert (Classification (category STRING PERCUSSION)))
)
(assert (Instrument (strings 18)))
(run)
(facts)
输出:
f-0 (MAIN::initial-fact)
f-1 (MAIN::Instrument (strings 18))
f-2 (MAIN::Classification (category STRING PERCUSSION))
For a total of 3 facts in module MAIN.
使用绑定变量是无用的,因为它们仅限于规则的上下文。
我尝试阅读有关 Jess 的教程,但找不到任何有用的内容。我想构建一个程序来找出我在说的是哪种乐器。
因此,如果乐器有弦乐,我们就知道该乐器属于弦乐或打击乐器(即钢琴)类别。我将如何编写一条规则来保存一个事实,说明类别是基于此标准的打击乐或弦乐?
我考虑过绑定,但绑定并不意味着我必须为每个潜在类别设置一个单独的变量?或者,我应该使用断言吗?
这演示了如何从规则中插入事实以存储一组可能的类别。
(deftemplate Instrument (slot strings))
(deftemplate Classification (multislot category))
(defrule cat-by-strings
?i <- (Instrument (strings ?s&:(> ?s 0)))
=>
(assert (Classification (category STRING PERCUSSION)))
)
(assert (Instrument (strings 18)))
(run)
(facts)
输出:
f-0 (MAIN::initial-fact)
f-1 (MAIN::Instrument (strings 18))
f-2 (MAIN::Classification (category STRING PERCUSSION))
For a total of 3 facts in module MAIN.
使用绑定变量是无用的,因为它们仅限于规则的上下文。