2016-06-28 17 views
0

Ich frage mich, ob ich in CLIPS ein Ereignis auf die Änderung eines Steckplatzes zuordnen kann. Beispiel:Event on slot modification

(defclass ROOM (is-a USER) 
    (slot id 
     (type SYMBOL)) 
    (slot windows-status 
     (allowed-strings "open" "close"))) 

Wenn 'windows-Status' Wertänderungen, würde Ich mag eine Funktion aufzurufen, nach der zulässigen-Strings.

Danke, Nicola

Antwort

1

Verwendung vor einem, nach oder um Message-Handler für die wechselseitige Put- Methode des Schlitzes und Sie können eine Funktion aus den Message-Handler basierend auf dem Wert nennen.

CLIPS> (clear) 
CLIPS> 
(defclass ROOM (is-a USER) 
    (slot id 
    (type SYMBOL)) 
    (slot windows-status 
    (allowed-strings "open" "close"))) 
CLIPS>  
(defmessage-handler ROOM put-id before (?value) 
    (printout t "put-id event " ?self:id crlf)) 
CLIPS> 
(defmessage-handler ROOM put-windows-status before (?value) 
    (printout t "put-window-status event " ?self:windows-status crlf)) 
CLIPS> (make-instance [r1] of ROOM (id room1) (windows-status "open")) 
put-id event nil 
put-window-status event nil 
[r1] 
CLIPS> (send [r1] put-id room2) 
put-id event room1 
room2 
CLIPS> (send [r1] put-windows-status "close") 
put-window-status event open 
"close" 
CLIPS>