(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!