gpt4 book ai didi

CLIPS 运行时崩溃

转载 作者:行者123 更新时间:2023-12-04 22:55:07 24 4
gpt4 key购买 nike

我写了一个程序来断言这条规则的 LHS 中的事实:

(defrule check-open-better (declare (salience 50))
?f1 <- (newnode (ident ?id) (gcost ?g) (fcost ?f) (father ?anc))

(status (ident ?id) (subject ?subject) (data $?eqL))
?f2 <- (status (ident ?old) (subject ?subject) (data $?eqL))

?f3 <- (node (ident ?old) (gcost ?g-old) (open yes))

(test
(eq
(implode$
(find-all-facts ((?f status))
(and
(eq(str-compare ?f:ident ?id) 0)
(eq(str-compare ?f:subject ?subject) 0)
(eq(str-compare (implode$ ?f:data) (implode$ $?eqL)) 0)
)
)
)

(implode$
(find-all-facts ((?f status))
(and
(eq(str-compare ?f:ident ?old) 0)
(eq(str-compare ?f:subject ?subject) 0)
(eq(str-compare (implode$ ?f:data) (implode$ $?eqL)) 0)
)
)
)
0)
)

(test (< ?g ?g-old))

?f4 <- (open-better ?a)

=>

(assert (node (ident ?id) (gcost ?g) (fcost ?f) (father ?anc) (open yes)))
(assert (open-better (+ ?a 1)))
(retract ?f1 ?f2 ?f3 ?f4)
(pop-focus)
(pop-focus))
node , newnodestatus被定义为deftemplate。

当这条规则被列入议程时,CLIPS 会像输入 (exit) 一样崩溃。命令。

我敢肯定,断言事实允许将此规则添加到议程中的规则不是错的。有谁知道为什么?

最佳答案

如果 CLIPS 崩溃,则是 CLIPS 中的错误。我尝试通过填充缺失的部分并在 CLIPS 6.3、6.31 和 6.4 中运行来重现该问题,但无法崩溃。

(deftemplate newnode 
(slot ident)
(slot gcost (type INTEGER))
(slot fcost)
(slot father))

(deftemplate status
(slot ident)
(slot subject)
(multislot data))

(deftemplate node
(slot ident)
(slot gcost (type INTEGER))
(slot open))

(deffacts start
(node (ident "1") (gcost 10) (open yes))
(open-better 0)
(newnode (ident "2"))
(status (ident "1"))
(status (ident "2")))

通常,从规则的条件中使用查询函数是一个坏主意,因为 1) 您可以使用模式匹配和 2) 包含在 中的查询测试 除非之前的模式有一些变化,否则不会重新评估 CE。

不清楚您想用 做什么查找所有事实调用。首先,里面有你不需要的垃圾。 str-比较 内爆$ 函数调用是不必要的,第三个参数 0 到 eq 会导致 测试 CE 总是失败,因为 的返回值查找所有事实 call 永远不会是 0。
  (test
(eq
(find-all-facts ((?f status))
(and
(eq ?f:ident ?id)
(eq ?f:subject ?subject)
(eq ?f:data $?eqL)
)
)

(find-all-facts ((?f status))
(and
(eq ?f:ident ?old)
(eq ?f:subject ?subject)
(eq ?f:data $?eqL)
)
)
)
)

两者 查找所有事实调用必须返回相同的事实,以便 测试 CE要满意。只有在没有 的情况下,这才是正确的。状态 事实或 ?id ?旧变量具有相同的值。

关于CLIPS 运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com