Клипы - Как я могу исключить символы из исключений оператора IF / READ? - PullRequest
1 голос
/ 22 марта 2020

Код задает пользователю вопрос a / n и вносит изменения - просто. Кажется, что оператор принимает только целочисленные типы и типы с плавающей точкой, и мне нужны только два ответа, поэтому я использовал 1 и 0 и исключил остальные, НО он читает только цифры, поэтому исключаются только цифры, а не символы.

(defrule rule01
    =>
    (printout t "Question (yes=1/no=0)?" crlf)
    (bind ?x (read))
    (if (!= ?x 1)
        then
        (if (= ?x 0)
            then
            (assert (rule01 no))
        else (printout t "Use ONLY 0 OR 1 for your answers!" crlf))
    else (assert (rule01 yes))))

В настоящее время при попытке ввода символа возвращается следующее:

CLIPS> (run)
Question (yes=1/no=0)?
g
[ARGACCES5] Function <> expected argument #1 to be of type integer or float
[PRCCODE4] Execution halted during the actions of defrule rule01.

Как добавить исключение для символов?

1 Ответ

0 голосов
/ 24 марта 2020

Используйте eq и neq вместо = и <>.

         CLIPS (6.31 6/12/19)
CLIPS> 
(defrule rule01
    =>
    (printout t "Question (yes=1/no=0)?" crlf)
    (bind ?x (read))
    (if (neq ?x 1)
        then
        (if (eq ?x 0)
            then
            (assert (rule01 no))
        else (printout t "Use ONLY 0 OR 1 for your answers!" crlf))
    else (assert (rule01 yes))))
CLIPS> (reset)
CLIPS> (run)
Question (yes=1/no=0)?
g
Use ONLY 0 OR 1 for your answers!
CLIPS> 
...