불편을 끼쳐 드려 죄송합니다. 테스트 조건부 요소를 사용하여 규칙 조건에서 표현식을 평가합니다. 사용 된 구문은 fact를 relation name bind와 일치 시키려고한다는 것을 나타냅니다. 명령 줄에서 무슨 일을하는지에 아날로그 규칙의 행동에서 결합 할 수있는 함수 호출을 실행하는 것입니다
CLIPS> (bind ?test (nth$ 1 (create$ 1)))
1
CLIPS>
(defrule testrule
=>
(bind ?test (nth$ 1 (create$ 1)))
(printout t ?test crlf))
CLIPS> (run)
1
CLIPS>
괄호가 광범위 클립에서 구분 기호로 사용되기 때문에이 많은 경우 어디 컨텍스트가 있습니다 코드 조각의 의미를 결정합니다. 규칙의 조건에 출력 코드를 이동
CLIPS>
(defrule hello
=>
(printout t Hello crlf))
CLIPS> (run)
Hello
CLIPS>
: 여기
CLIPS> (printout t Hello crlf)
Hello
CLIPS>
규칙의 행동에서 유사한 전화는 다음과 같습니다 예를 들어, 다음 명령 프롬프트에서 출력 명령을 호출입니다
이
CLIPS>
(defrule hello
(printout t Hello crlf)
=>)
CLIPS> (agenda)
CLIPS> (facts)
f-0 (initial-fact)
For a total of 1 fact.
CLIPS> (assert (printout t Hello crlf))
<Fact-1>
CLIPS> (agenda)
0 hello: f-1
For a total of 1 activation.
CLIPS> (facts)
f-0 (initial-fact)
f-1 (printout t Hello crlf)
For a total of 2 facts.
CLIPS>
조건 요소는 규칙의 조건에서 사용할 수있는 테스트가 산업사하기 : 사실과 일치하도록 패턴에 함수 호출에서 코드의 의미를 변경
CLIPS>
(defrule hello (test (printout t Hello crlf)) =>)
Hello
CLIPS>
일부 규칙 기반 언어 그러나, 클립이하는, 당신은 규칙의 조건에서 파생 된 값으로 변수를 결합 할 수 있습니다 : 동봉 된 코드는 함수 호출이 아닌 사실과 일치하는 패턴이다 icate 아니이 기능을 지원하므로 테스트 조건 요소 내에 바인드 기능 호출을 배치하여이 문제를 해결받을 수 없습니다 : 응답에 대한
CLIPS> (defrule hello (test (bind ?x 1)) => (printout t ?x crlf))
[PRCCODE3] Undefined variable x referenced in RHS of defrule.
ERROR:
(defrule MAIN::hello
(test (bind ?x 1))
=>
(printout t ?x crlf))
CLIPS>
감사합니다,하지만 난 그것을 바인딩을 할당 할 수 없습니다 이해가 안 돼요 이 문제와 관련하여, 왜 (bind? test 1)와 같은 간단한 바인드가 대신 작동할까요? –
몇 가지 추가 clari 약. –
나에게 이해가가는 것처럼 보입니다. 테스트를 제외한 왼쪽의 모든 것은 패턴 매칭을 위해서만 해석되며 바인딩의 n 번째 $/create $/등의 표준 함수는 실패합니다. 해당 컨텍스트에서 사용할 수 없습니다. –