CLIPS를 사용할 때 규칙을 다시 적용하고 싶습니다. 그러나 새로 고침 명령은 매번 잘 작동하지 않습니다. 그래서 나는 약간의 테스트를했지만 아직도 그것에 대해 혼란스러워합니다.클립에서 정확히 (새로 고침) 작동 방식은 무엇입니까?
Q1 : 팩트를 수정하는 규칙을 사용할 수 있습니까?
> (defglobal ?*lock* = 0)
>
> (deftemplate counter
> (slot number))
>
> (deffacts initial-data
> (counter (number 0)))
>
> (defrule rule-1
> ?f<-(counter (number ?x))
> (test (= ?*lock* 0))
> =>
> (printout t "counter number1" crlf)
> (bind ?*lock* (+ ?*lock* 10))
> (modify ?f (number (+ ?x 1)))
> )
>
> (defrule rule-2
> ?f<-(counter (number ?x))
> (test (= ?*lock* 10))
> =>
> (printout t "counter number2" crlf)
> (bind ?*lock* 0)
> )
처음 실행 한 후, 잠금이 0이된다하지만 내가 규칙-1 의제에 들어 가지 않는다 (새로 고침 규칙 1) 입력 : 은 내가 .CLP을 만듭니다. RHS의 수정 작업으로 인해 문제가 발생했는지 궁금합니다.
Q2 : 새로 고침을 사용할 때 전역 값이 LHS에서 작동합니까?
또 다른 이상한 점은 처음 실행 후입니다. 잠금이 0.I 유형 (새로 고침 규칙 -2)으로 변경되었으며 규칙 2가 다시 의제에 있음을 찾습니다. 그러나 규칙 2의 LHS는 규칙이 일치하기를 원한다면 잠금이 10이되어야한다고 제한합니다. 테스트 조건이 전혀 작동하지 않는 것 같습니다. 그러나 테스트 조건은 실제로 시스템을 실행하기 위해 타이핑 (리셋) 및 실행 (실행)을 의미하는 시스템을 실행할 때 실제로 작동합니다. 터미널에 어떤 쇼는 다음과 같이이다 :
CLIPS> (reset) ==> Activation 0 rule-1: f-1 CLIPS> (facts) f-0 (initial-fact) f-1 (counter (number 0)) For a total of 2 facts. CLIPS> (run) counter number1 ==> Activation 0 rule-2: f-2 counter number2 CLIPS> (refresh rule-1) CLIPS> (refresh rule-2) ==> Activation 0 rule-2: f-2 CLIPS> (run) counter number2
내가 규칙을 발사 할 때 (실행) 및 (새로 고침) 사이에 다른이 궁금해?
정말 혼란 스럽습니다. 어떤 답해 주셔서 감사합니다.
명확한 설명, 고맙습니다. –