在正确设置插槽之前避免模式匹配(错误)
Avoid pattern matching (errors) until a slot is set correctly
规则的 LHS R_blup
包含
(test (>= ?s2 2))
即检查?s2
是否大于等于2。?s2
对应一个名为s2
.
的实例槽
不幸的是,我得到了错误
Function >= expected argument #1 to be of type integer or float
问题是我的代码在我可以设置参数 #1 之前执行 (test ...
,即在我可以将 s2
设置为整数或浮点值之前。 s2
应该设置为由另一个规则 R_blah
.
触发的 python 调用中的整数
错误是在属于另一个规则 R_xyz
的另一个 python 调用中间触发的。此 python 调用通过 clips_instance.Slots["slot_name"] = some_value
.
修改实例
这通常是如何处理的?我看到三个我不太喜欢的解决方案:
- 正在为
s2
. 设置默认(整数)值
- 修改
(test ...
以首先检查 nil
。
- 添加另一个 check/rule 等到
s2
不再是 nil
是否有可能 try/except/pass 错误?
使用函数 object-pattern-match-delay 延迟模式匹配,为一系列更改创建原子操作:
CLIPS> (defclass POINT (is-a USER) (slot x) (slot y))
CLIPS>
(defrule check
(object (is-a POINT) (x ?s2))
(test (>= ?s2 2))
=>)
CLIPS> (make-instance [p1] of POINT)
[ARGACCES5] Function >= expected argument #1 to be of type integer or float
[DRIVE1] This error occurred in the join network
Problem resides in associated join
Of pattern #1 in rule check
[p1]
CLIPS> (agenda)
CLIPS>
(object-pattern-match-delay
(make-instance [p2] of POINT)
(make-instance [p3] of POINT)
(send [p2] put-x 3)
(send [p3] put-x 0))
0
CLIPS> (agenda)
0 check: [p2]
For a total of 1 activation.
CLIPS>
规则的 LHS R_blup
包含
(test (>= ?s2 2))
即检查?s2
是否大于等于2。?s2
对应一个名为s2
.
不幸的是,我得到了错误
Function >= expected argument #1 to be of type integer or float
问题是我的代码在我可以设置参数 #1 之前执行 (test ...
,即在我可以将 s2
设置为整数或浮点值之前。 s2
应该设置为由另一个规则 R_blah
.
错误是在属于另一个规则 R_xyz
的另一个 python 调用中间触发的。此 python 调用通过 clips_instance.Slots["slot_name"] = some_value
.
这通常是如何处理的?我看到三个我不太喜欢的解决方案:
- 正在为
s2
. 设置默认(整数)值
- 修改
(test ...
以首先检查nil
。 - 添加另一个 check/rule 等到
s2
不再是nil
是否有可能 try/except/pass 错误?
使用函数 object-pattern-match-delay 延迟模式匹配,为一系列更改创建原子操作:
CLIPS> (defclass POINT (is-a USER) (slot x) (slot y))
CLIPS>
(defrule check
(object (is-a POINT) (x ?s2))
(test (>= ?s2 2))
=>)
CLIPS> (make-instance [p1] of POINT)
[ARGACCES5] Function >= expected argument #1 to be of type integer or float
[DRIVE1] This error occurred in the join network
Problem resides in associated join
Of pattern #1 in rule check
[p1]
CLIPS> (agenda)
CLIPS>
(object-pattern-match-delay
(make-instance [p2] of POINT)
(make-instance [p3] of POINT)
(send [p2] put-x 3)
(send [p3] put-x 0))
0
CLIPS> (agenda)
0 check: [p2]
For a total of 1 activation.
CLIPS>