2017-05-24 3 views
0
(bind ?existing_total_count (nth$ 2 (send ?INSTANCE ?get-INTS))) 
(send (nth$ 2 (send ?INSTANCE put-INTS)) (+ ?total_count ?existing_total_count)) 

첫 번째 줄은 잘 컴파일 클립에 컴파일 타임 오류가 발생, 클립에서 개체를 업데이트 할 수 있지만, 두 번째 줄은 내가 무엇을 findout하지 못할

타입 기호로 오류를 기능 전송 예상 인수 # 2를 던지고 문제가 있습니다. 슬롯 INTS의 두 번째 항목을 업데이트하려고합니다.

답변

1
CLIPS> 
(defclass A 
    (is-a USER) 
    (multislot INTS)) 
CLIPS> (make-instance [a] of A (INTS 1 2 3)) 
[a] 
CLIPS> (send [a] print) 
[a] of A 
(INTS 1 2 3) 
CLIPS> (bind ?INSTANCE [a]) 
[a] 
CLIPS> (bind ?existing_total_count (nth$ 2 (send ?INSTANCE get-INTS))) 
2 
CLIPS> (bind ?total_count 3) 
3 
CLIPS> (slot-replace$ ?INSTANCE INTS 2 2 (+ ?total_count ?existing_total_count)) 
(1 5 3) 
CLIPS> (send [a] print) 
[a] of A 
(INTS 1 5 3) 
CLIPS> (bind ?total_count 5) 
5 
CLIPS> (send ?INSTANCE put-INTS (replace$ (send ?INSTANCE get-INTS) 2 2 (+ ?total_count ?existing_total_count))) 
(1 7 3) 
CLIPS> (send [a] print) 
[a] of A 
(INTS 1 7 3) 
CLIPS> 
+0

답장을 보내 주셔서 감사합니다. 대체 할 수있는 슬롯이 있음을 인식하지 못했습니다. 슬롯 교체 $를 사용하여 [a]가 변경된 것을 볼 수 있습니다. 실제로는 바인드가 실제로 참조를 갖습니다. [a]를 INSTANCE에 넣습니다. [a]를 인쇄 할 때 1 5 3이 표시되고 항목을 변경하는 두 번째 방법은 put-INTS를 사용하여 $를 대체하는 것입니까? – naren

+0

문서 링크는 http://www.clipsrules.net/?q=Documentation에 있습니다. ? INSTANCE의 바운드 값은 put-INTS 사용의 결과로 변경되지 않습니다. –