ожидается начало ошибки конструкции

Когда я запускаю систему, она показывает ошибку «ожидается начало конструкции» .. как я могу исправить эту ошибку

мои правила выглядят так

(defrule UFP
 (not (repair ?))
   ?f <- (rule1)

   =>
(retract ?f)
(printout t "Finish UFP (y/n)
yes> go to rule 10 - Advise : Select your major
No> go to rule 2 - Advise : please finish all the levels of UFP to enter your major
q>Exit system" crlf)

(bind ?response (check-YNoptions-input))
(if (eq ?response y)
then
(assert (rule10))
)
(if (or(eq ?response q) (eq ?response Q))
    then 
    (output-exitmessage)
)
(if (eq ?response n)
    then



            (assert (rule2))
        )
)
)



; --------------------------------------------------
; Define coleege-system rule2
; --------------------------------------------------
(defrule rule2
?f <- (rule2)
   =>
   (retract ?f)

(bind ?response (ask-question "which level from OET result: (A0 or A1 =level1 ,A2= level2, B1=level3)
 (level1/level2/level3)
level1 > go to rule 3
level2 > go to rule 5
level3 > go to rule 7"


                   level1 level2 level3))
   (if (eq ?response level1)
       then 
      (assert (rule3))
       else (if (eq ?response level2)
                then (assert (rule5))

     else  (assert (rule7))
     )))

второй выпуск:

хотите выйти из системы, когда нажимаете клавишу «q», с каждым правилом, каждое правило имеет клавиши y и n ..... какова правильная неисправность ..


person raya ali    schedule 15.06.2015    source источник


Ответы (1)


Если смотреть компиляции, можно увидеть момент, в котором возникает ошибка:

CLIPS> (clear)
CLIPS> (watch compilations)
CLIPS> (load problem.clp)
Defining deffunction: check-YNoptions-input
Defining deffunction: output-exitmessage
Defining deffunction: ask-question
Defining defrule: UFP +j+j+j

[CSTRCPSR1] Expected the beginning of a construct.
Defining defrule: rule2 +j+j
FALSE
CLIPS> 

Проблема возникает после правила UFP. После правила ставится дополнительная правая скобка. При редактировании правил CLIPS полезно использовать редактор с балансировкой скобок определенного типа. Это облегчает поиск таких ошибок.

Если вы хотите остановить выполнение CLIPS, не выходя из CLIPS, используйте команду (halt). Если вы хотите выйти из CLIPS, используйте команду (выход).

person Gary Riley    schedule 15.06.2015
comment
Спасибо, я удаляю правую скобку, и теперь она отображается верно, но что касается команды выхода, я использую команду halt, но она показывает, что ввод недействителен .. почему :) - person raya ali; 16.06.2015
comment
Трудно сказать, не видя того, что ты сделал. В CLIPS нет ничего, что генерировало бы сообщение о недопустимом вводе. - person Gary Riley; 16.06.2015
comment
Это моя дефункция (deffunction check-YNoptions-input() (bind ?response (read) ) ( while (and (not(eq ?response y)) (not(eq ?response n)) (not(eq ?response q )) делать (распечатка t Ввод недействителен, пожалуйста, выберите ответ еще раз. crlf) (bind ?response (read)) ) (return ?response)) - person raya ali; 16.06.2015
comment
Если вы печатаете (остановка) при вызове этой функции, это не сработает. Когда вы обнаружите q или h или любую другую выбранную вами букву, вам нужно вызвать команду (halt): (if (eq ?response q) then (halt)) - person Gary Riley; 16.06.2015