Syntax Error Check appropriate syntax for deftemplate

22 views
Skip to first unread message

Saulius

unread,
Feb 22, 2023, 4:49:37 PM2/22/23
to CLIPSESG
(deftemplate aplinka "Informacija apie aplinka"
 (slot pos (default 1)) ;pozicija kurioje fiksuosime siuksles

)
(deftemplate robotas  "Informacija apie roboto pozicija"
 (slot pos (default 1)) ;roboto pozicija
 (slot action (default 0));roboto veiksmas: 1 - pirmyn; -1 - atgal
)
(deffacts start ;pradine roboto ir aplinkos busena
 (aplinka)
 (robotas)
)
(defrule siuksle ;siukslinimo ir valymo taisykle
 ?e <- (aplinka (pos ?x)) ;taisykle aktyvuojasi, kai roboto ir siuksl4s pozicija
 ?r<-(robotas (pos ?x)) ;sutampa t.y. lygi tam paciam kintamajam ?x
 =>
 (printout t "Robotas surado siuksle " ?x " pozicijoje ir ja isvale " crlf)
 (retract ?e) ;isimamas faktas is atminties, kad buvo siuksle pozicijoje ?x
 (printout t "kur prisiukslinti? (1,2,3...9)" crlf)
 (bind ?y (read)) ;ivedama nauja siuksles pozicija
 (if (and (> ?y 0)(<= ?y 9)) then ;jeigu ivestas skaicius >0 ir <10 tai
 (assert (aplinka (pos ?y))) ;ivedamas faktas, kurioje pozicijoje yra siuksle
 else
 (printout t "Robotas baige darba" crlf);kitu atveju naujo fakto nera - algoritmas uzbaigiamas
 )
)
(defrule agentas_9_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&9&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas yra 9
pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "8 " pozicija" crlf)
 (modify ?r (action -1)(pos 8)) ;robotas juda i 8 pozicija ir judes link 1 pozicijos
)
(defrule agentas_1_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&1&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas yra 1
pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "2 " pozicija" crlf)
 (modify ?r (action 1)(pos 2)) ;robotas juda i 2 pozicija ir judes link 9 pozicijos
)
(defrule agentas_tarpineje_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&~1&~9&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas nėra
;nei 1, nei 9 pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "(+ ?k ?a) " pozicija" crlf)
 (modify ?r (pos (+ ?k ?a))) ;robotas juda per 1 pozicija pirmyn arba atgal priklausomai
) ;nuo priskirto roboto veiksmo

(reset)
(run) 

// Ran the program.Why i'm getting these errors?  //

CLIPS> (batch "test.bat")
TRUE
CLIPS> (deftemplate aplinka "Informacija apie aplinka"
 (slot pos (default 3)) ;pozicija kurioje fiksuosime siuksles

)
CLIPS> (deftemplate agentas_9_pozicijoje)
CLIPS> (deftemplate robotas "Informacija apie roboto pozicija"
 (slot pos (default 1)) ;roboto pozicija
 (slot action (default 0));roboto veiksmas: 1 - pirmyn; -1 - atgal
)
CLIPS> (deffacts start ;pradine roboto ir aplinkos busena
 (aplinka)
 (robotas)
)
CLIPS> (defrule siuksle ;siukslinimo ir valymo taisykle
 ?e <- (aplinka (pos ?x)) ;taisykle aktyvuojasi, kai roboto ir siuksl4s pozicija
 ?r<-(robotas (pos ?x)) ;sutampa t.y. lygi tam paciam kintamajam ?x
 =>
 (printout t "Robotas surado siuksle " ?x " pozicijoje ir ja isvale " crlf)
 (retract ?e) ;isimamas faktas is atminties, kad buvo siuksle pozicijoje ?x
 (printout t "kur prisiukslinti? (1,2,3...9)" crlf)
 (bind ?y (read)) ;ivedama nauja siuksles pozicija
 (if (and (> ?y 0)(<= ?y 9)) then ;jeigu ivestas skaicius >0 ir <10 tai
 (assert (aplinka (pos ?y))) ;ivedamas faktas, kurioje pozicijoje yra siuksle
 else
 (printout t "Robotas baige darba" crlf);kitu atveju naujo fakto nera - algoritmas uzbaigiamas
 )
)
CLIPS> (defrule agentas_9_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&9&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas yra 9
pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "8 " pozicija" crlf)
 (modify ?r (action -1)(pos 8)) ;robotas juda i 8 pozicija ir judes link 1 pozicijos
)

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for defrule.

ERROR:
(defrule MAIN::agentas_9_pozicijoje
   ?e <- (aplinka (pos ?l))
   ?r <- (robotas (pos ?k&9&~?l) (action ?a))
   pozicijoje
CLIPS> (defrule agentas_1_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&1&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas yra 1
pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "2 " pozicija" crlf)
 (modify ?r (action 1)(pos 2)) ;robotas juda i 2 pozicija ir judes link 9 pozicijos
)

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for defrule.

ERROR:
(defrule MAIN::agentas_1_pozicijoje
   ?e <- (aplinka (pos ?l))
   ?r <- (robotas (pos ?k&1&~?l) (action ?a))
   pozicijoje
CLIPS> (defrule agentas_tarpineje_pozicijoje
 ?e <- (aplinka (pos ?l))
 ?r<-(robotas (pos ?k&~1&~9&~?l) (action ?a)) ;taisykle aktyvuojasi, jei robotas nėra
;nei 1, nei 9 pozicijoje
 =>
 (printout t "robotas juda is " ?k " i "(+ ?k ?a) " pozicija" crlf)
 (modify ?r (pos (+ ?k ?a))) ;robotas juda per 1 pozicija pirmyn arba atgal priklausomai
) ;nuo priskirto roboto veiksmo
CLIPS>
(reset)
CLIPS> (run)
CLIPS> 

Thanks for help!

CLIPS Support

unread,
Feb 22, 2023, 6:23:23 PM2/22/23
to CLIPSESG
Look at the point in the rule where the error message shows that parsing detected an error. You've got the symbol pozicijoje following the second pattern in the conditions of the rule. At that point CLIPS would either be expecting the beginning of another pattern (starting with either a variable or left parenthesis) or the => symbol separating the conditions from the actions. 

ERROR:
(defrule MAIN::agentas_9_pozicijoje
   ?e <- (aplinka (pos ?l))
   ?r <- (robotas (pos ?k&9&~?l) (action ?a))
   pozicijoje

Reply all
Reply to author
Forward
0 new messages