我问是否有可能在RHS的rHS中获取事实索引? 每次我尝试索引RHS中的事实时,它都会给我一个未定义的。 因为我有一个while循环,我希望能够根据我的输入数据修改电梯事实。
$skupu = array('a1','a5');
$skupuImploded = implode(',', $skupu);
$consult_sku= "SELECT * FROM fulfillment_test WHERE sku IN ($skupuImploded)";
$result_s= mysqli_query($db, $consult_sku);
这是我的代码的一个例子,因为我不能把所有在线:
(deftemplate elevator
(slot goal))
(deffacts elevator
(elevator (goal 0)))
(defrule read-data
=>
?f1 <- (elevator)
(modify ?f2 (goal 1))
)
这是我的输入文件:
(deftemplate data
(slot data)
)
(deffacts data
(data (data 1))
)
(defrule rule1
?f1 <-(data)
=>
(bind ?value (readline input) )
(while (neq ?value EOF)
do
(bind ?data (fact-slot-value ?f1 data))
(printout t "data " ?data crlf )
(retract ?f1)
(modify ?f1 (data ?value))
(bind ?value (readline input)
)
)
)
这就是我得到的:
2
3
4
5
6
7
我希望它打印出来 数据2 数据3 数据4 .. ..
答案 0 :(得分:0)
你可以从规则的RHS这样做,但如果你的规则实际上没有LHS条件,那么使用规则来改变事实的价值毫无意义。只需使用一个功能。
CLIPS>
(deftemplate elevator
(slot goal))
CLIPS>
(deffacts elevator
(elevator (goal 0)))
CLIPS>
(defrule read-data
=>
(do-for-fact ((?f elevator)) TRUE
(modify ?f (goal 1))))
CLIPS> (watch facts)
CLIPS> (reset)
<== f-0 (initial-fact)
==> f-0 (initial-fact)
==> f-1 (elevator (goal 0))
CLIPS> (run)
<== f-1 (elevator (goal 0))
==> f-2 (elevator (goal 1))
CLIPS>
或者,您可以在规则的条件中绑定要修改的事实:
CLIPS> (clear)
CLIPS>
(deftemplate elevator
(slot goal))
CLIPS>
(deffacts elevator
(elevator (goal 0)))
CLIPS>
(defrule read-data
?f <- (elevator (goal 0))
=>
(modify ?f (goal 1)))
CLIPS> (watch facts)
CLIPS> (reset)
<== f-0 (initial-fact)
==> f-0 (initial-fact)
==> f-1 (elevator (goal 0))
CLIPS> (run)
<== f-1 (elevator (goal 0))
==> f-2 (elevator (goal 1))
CLIPS>
更新:
您可以将原始规则设置为&#34; work&#34;通过删除retract并将?f1重新绑定到modify:
返回的值CLIPS> (clear)
CLIPS>
(deftemplate data
(slot data))
CLIPS>
(deffacts data
(data (data 1)))
CLIPS>
(defrule rule1
?f1 <- (data)
=>
(bind ?value (readline input))
(while (neq ?value EOF)
(bind ?data (fact-slot-value ?f1 data))
(printout t "data " ?data crlf )
(bind ?f1 (modify ?f1 (data ?value)))
(bind ?value (readline input))))
CLIPS> (reset)
CLIPS> (open input.txt input)
TRUE
CLIPS> (run)
data 1
data 2
data 3
data 4
data 5
data 6
CLIPS> (close input)
TRUE
CLIPS>
在RHS上多次修改相同的事实仍然很可疑。