как я могу поместить факты в логический слот к тому моменту после того, как составить правило, которое сможет его посчитать? - PullRequest
1 голос
/ 23 июня 2019

Я хочу сосчитать мои факты, и эти факты должны быть логическими.для моего намерения мне нужно только считать TRUE.Моя проблема, если я утверждаю или использую де-факто, чтобы сделать 4 факта в одном слоте, например.рабочая память не читает все факты.Я попытался поставить другой слот с другими данными (имена в данном случае) и работать хорошо, но мне не нужен другой слот.я просто делаю это, чтобы попытаться запустить этот код.есть ли другой вариант?позвольте мне показать вам:

(deftemplate testing (slot bole)(slot otro))

(watch all)

(defquery search-by-true

  "Finds true"
(declare (variables ?ln))
(testing (bole ?ln)(otro ?ot)))

 (deffacts data

  (testing (bole TRUE)(otro josue))
  (testing (bole TRUE)(otro pedro))
  (testing (bole FALSE)(otro pablo))
  (testing (bole TRUE)(otro carlos))
)

(reset)

    (bind ?result (run-query* search-by-true TRUE))

(bind ?x 0)

  (while (?result next)

   (bind ?x (+ ?x 1))

   )
       (printout t (* ?x 0.3) crlf)

Мои намерения - научиться этому, а затем использовать объекты с Java-кодом и jess.как я собираюсь использовать JCheckbox, и эти объекты являются логическими, поэтому мне нужно это понять, пожалуйста.если у вас есть хорошая рекомендация для меня, я принимаю ее со смирением.Спасибо.

1 Ответ

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

Если я вас правильно понимаю, вы бы хотели, чтобы рабочая память содержала что-то вроде

(testing (bole TRUE))
(testing (bole TRUE))
(testing (bole FALSE))

... и затем запустите некоторый код, который сообщит вам, что есть 2 факта «боле верно». Это невозможно в Jess: рабочая память не может содержать повторяющиеся факты. Если вы попытаетесь утвердить факт, идентичный существующему, assert вернет FALSE, и в рабочую память не будет внесено никаких изменений. Вы можете использовать свой дополнительный слот для хранения серийного номера или другой уникальной информации.

...