2016-11-22 3 views
0

Wie kann ich in CLIPS bedingte Regel machen die AusgabeCLIPS bedingte Regel

Zum Beispiel

(deftemplate holiday 
(slot hotel (allowed-symbols nice good poor)) 
(slot weather (allowed-symbols sunny raining)) 
) 
(deftemplate output 
(slot option (allowed-symbols go plan stay)) 
) 

Whith dieser dies zu finden, wie schaffen wir eine Regel wie

if hotel = poor then stay 
if hotel = poor and weather = raining then stay 
if (hotel = poor and weather = sunny) or (hotel = good and weather = raining) then plan 

Dank

Antwort

1
(defrule hotel-rule1 
     (holiday (hotel ?hotel&:(eq ?hotel poor))) 
     => 
     (assert (output (option stay))) 
    ) 

(defrule hotel-rule2 
     (holiday (hotel ?hotel&:(eq ?hotel poor)) (weather ?weather&:(eq ?weather raining))) 
     => 
     (assert (output (option stay))) 
    ) 

Ich würde die "oder" Bedingung Ihrer letzten Regel in zwei verschiedene Regeln aufteilen, ähnlich den Beispielen, die ich geschrieben habe.

Bye Nic

+0

Nic danken. Ich erhalte einen Fehler: [EXPRNPSR3] Fehlende Funktionsdeklaration für Option. Mache ich etwas falsch? – Selrac

+0

Tut mir leid, es funktioniert. Ich habe deinen Code nicht korrekt kopiert. Danke – Selrac

+0

Sie können die Konstanten direkt anpassen, anstatt die Variable zu binden und einen Aufruf der eq-Funktion zu machen. Zum Beispiel, statt (Urlaub (Hotel? Hotel & :(eq? Hotel arm)) (Wetter? Wetter & :(eq? Wetter Regen))), Nutzung (Urlaub (Hotel arm) (Wetter regnet)) –