累加函数不累加事实
Accumulate function does not accumulate fact
我正在努力减少电路并在串行连接方面遇到困难。我用两个节点对分支进行了建模,为了检测串行连接,我编写了以下规则:
(defrule serial
?b1 <- (Branch (node2 ?n1) (resistance ?v1))
?b2 <- (Branch (node1 ?n1) (resistance ?v2) (node2 ?n3))
?c <- (accumulate (bind ?count 0)
(bind ?count (+ ?count 1))
?count
(Branch (node1 ?n1))
)
(test (eq ?c 1))
?c1 <- (accumulate (bind ?count1 0)
(bind ?count1 (+ ?count1 1))
?count1
(Branch (node2 ?n1))
)
(test (eq ?c1 1))
=>
(modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2)))
(retract ?b2)
)
我想统计有多少个分支具有相同的起始节点,如果超过一个,那么这不是串行连接。不幸的是,以下分支的计数 returns 1:
f-1 (MAIN::Branch (name AB) (node1 A) (node2 B) (resistance 2))
f-2 (MAIN::Branch (name BC) (node1 B) (node2 C) (resistance 2))
f-3 (MAIN::Branch (name BC) (node1 B) (node2 T) (resistance 5.0))
并将 f-1 和 f-2 视为串行连接。这个问题有解决办法吗?
规则不会触发集合 AB、BC 和 BT,我想它不应该触发,因为 B 连接到 C 和 T。而且我认为可以消除的节点不能有一个以上的前任和不超过一位继任者。因此我建议这条规则:
(defrule myserial
?b1 <- (Branch (node1 ?n1) (node2 ?n2) (resistance ?v1))
?b2 <- (Branch (node1 ?n2) (node2 ?n3) (resistance ?v2))
(not (Branch (node1 ~?n1) (node2 ?n2)))
(not (Branch (node1 ?n2) (node2 ~?n3)))
=>
(modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2)))
(retract ?b2)
)
我正在努力减少电路并在串行连接方面遇到困难。我用两个节点对分支进行了建模,为了检测串行连接,我编写了以下规则:
(defrule serial
?b1 <- (Branch (node2 ?n1) (resistance ?v1))
?b2 <- (Branch (node1 ?n1) (resistance ?v2) (node2 ?n3))
?c <- (accumulate (bind ?count 0)
(bind ?count (+ ?count 1))
?count
(Branch (node1 ?n1))
)
(test (eq ?c 1))
?c1 <- (accumulate (bind ?count1 0)
(bind ?count1 (+ ?count1 1))
?count1
(Branch (node2 ?n1))
)
(test (eq ?c1 1))
=>
(modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2)))
(retract ?b2)
)
我想统计有多少个分支具有相同的起始节点,如果超过一个,那么这不是串行连接。不幸的是,以下分支的计数 returns 1:
f-1 (MAIN::Branch (name AB) (node1 A) (node2 B) (resistance 2))
f-2 (MAIN::Branch (name BC) (node1 B) (node2 C) (resistance 2))
f-3 (MAIN::Branch (name BC) (node1 B) (node2 T) (resistance 5.0))
并将 f-1 和 f-2 视为串行连接。这个问题有解决办法吗?
规则不会触发集合 AB、BC 和 BT,我想它不应该触发,因为 B 连接到 C 和 T。而且我认为可以消除的节点不能有一个以上的前任和不超过一位继任者。因此我建议这条规则:
(defrule myserial
?b1 <- (Branch (node1 ?n1) (node2 ?n2) (resistance ?v1))
?b2 <- (Branch (node1 ?n2) (node2 ?n3) (resistance ?v2))
(not (Branch (node1 ~?n1) (node2 ?n2)))
(not (Branch (node1 ?n2) (node2 ~?n3)))
=>
(modify ?b1 (node2 ?n3) (resistance (+ ?v1 ?v2)))
(retract ?b2)
)