谓词函数
谓词函数被定义为任何可返回符号TRUE
或者FALSE
的函数。
谓词函数有两种类型:
- 预定义谓词函数,系统提供的,直接调用
- 用户自定义函数,使用C或其它语言与Clips通信的
(and (> 1 2) (< 4 3)) ; FALSE
(or (> 1 2) (< 3 4)) ; TRUE
(not (< 1 2)) ; FALSE
测试条件元素
这点类似于shell的test
语句,也是使用test
关键字实现的。基本语法格式为:
(test <predicate-function>)
<predicate-function>
返回不是FALSE
的值时,测试条件通过。规则只有满足测试条件和其他模式时,才会触发。
代码示例:
(deftemplate person
(slot age)
(slot name)
)
(defrule myrule
(person (name ?name) (age ?age))
(test (> ?age 18))
=>
(printout t "Adult" crlf)
)
(assert (person (name Tom) (age 20)))
(run)
代码输出Adult
信息。
字段约束
这是在输入的时候就直接添加约束,而不是另外添加判断。给出一个代码示例:
(defrule myrule
(size ?size&:(> ?size 0))
=>
(printout t "OK" crlf)
)
(assert (size 1))
(assert (size 0))
(run)
代码只会有一个OK输出。
在某些情况下,需要字段的返回值进行约束,此时使用=(<pridiction>)
的模式。比如:
= (mod ?size 4)
表示此字段等于?size
模4的值。
逻辑连接词
基本的几个连接词:
or
:或and
:与not
:非exists
:存在至少一个事实与模式匹配,不管实际匹配该模式的事实总数。forall
:匹配所有的规则
这些留作后期补充。