Как добавить глобальную переменную для подсчета количества ответов «да» или «нет»? - PullRequest
0 голосов
/ 06 июня 2019

Я работаю над системой диагностики питания, в которой пользователям задают вопросы / симптомы, и они отвечают, вводя да или нет. Я хочу отслеживать количество да или нет и делать с ними расчеты. Как хранить счетчик да или нет в глобальных переменных. У меня уже есть функция для расчета, но я не знаю, как получить да или нет из пользовательского ввода. Я новичок в использовании правил Джесс. Ниже я добавил коды рабочего правила.

(defrule menu::initialize
  (diagnosis)
  =>
  (assert 

  (question (ident q21) (text "Does the child's hair tend to be slight? (Yes or No)") (type yes-no))

  (question (ident q22) (text "Does the child's hair tend to be reddish? (Yes or No)") (type yes-no))

  (question (ident q23) (text "Is the child often affected by ISPA/ TBC? (Yes or No)") (type yes-no))

  (question (ident q24) (text "Does the child's hair tend to be easily falls off? (Yes or No)") (type yes-no))

  (question (ident q25) (text "Is there any abnormality on the child's complexion? (Yes or No)") (type yes-no))

  (question (ident q26) (text "Is there any swelling on the child's face? (Yes or No)") (type yes-no))

  )
  (menu::init)
)

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Вы показали правило под названием «menu :: initialize», которое вставляет некоторые факты, называемые «вопрос». Вам нужно правило, чтобы использовать эти факты, и тогда это правило будет содержать оператор для добавления 1 к глобальной переменной. Вы можете найти примеры правил и использования глобальных переменных в руководстве по Jess.

Пожалуйста, не ожидайте, что кто-то на SO сделает вашу домашнюю работу за вас.

0 голосов
/ 08 июня 2019

Я реализовал предложенное решение выше и получил именно то, что искал.

Моя реализация ниже: .. Не может быть оптимальным решением, но оно работает. Спасибо ТАК: D

(defrule get-y21
"Add 1 to global variable for every yes answer from question21"
 (answer (ident q21) (text yes ))
=>
(bind ?*countyes* (+ ?*countyes* 1))
)

(defrule get-n21
"Add 1 to global variable for every no answer from question21 "
 (answer (ident q21) (text no ))
=>
(bind ?*countno* (+ ?*countno* 1))
)
...