#artificial-intelligence #clips
#искусственный интеллект #клипы
Вопрос:
Это мой код CLIPS, который я собираюсь соединить с кодом Java. Когда я пытаюсь загрузить файл в WinCLIPS, он записывается как FALSE.
Я думаю, что проблема может быть в синтаксисе or / и или if-else.
(deftemplate diagnoza
(slot wiek)
(slot klasa)
)
(deftemplate result
(slot value)
)
(defrule wiek-klasa-rule
(diagnoza (wiek ?w))
(diagnoza (klasa ?g))
=>
(if (and (< ?w 19)(> ?g 4)))
then
(bind ?x "Wiek szkolny - ok.")
(printout t ?x crlf)
(assert (result (value ?x)))
(if (< ?w 4))
then
(bind ?x "Wiek poniżej 4 lat. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)))
(if (> ?w 19))
then
(bind ?x "Wiek powyżej 19 lat. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)))
else
(bind ?w "Nieprawidłowa wartość wieku. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)))
)
)
Ответ №1:
Ваши круглые скобки несбалансированы. Если вы сделаете отступ в своем коде, чтобы отразить глубину вложенности, вы сможете увидеть, где вы допустили ошибки:
(defrule wiek-klasa-rule
(diagnoza (wiek ?w))
(diagnoza (klasa ?g))
=>
(if (and (< ?w 19)
(> ?g 4)
)
)
then
(bind ?x "Wiek szkolny - ok.")
(printout t ?x crlf)
(assert (result (value ?x)
)
)
(if (< ?w 4)
)
then
(bind ?x "Wiek poniżej 4 lat. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)
)
)
(if (> ?w 19)
)
then
(bind ?x "Wiek powyżej 19 lat. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)))
else
(bind ?w "Nieprawidłowa wartość wieku. Nie można zdiagnozować.")
(printout t ?x crlf)
(assert (result (value ?x)))
)