Если answer
является deftemplate с прорезями ident
и text
, следующий фрагмент выглядит как строительство факта:
(answer(ident headers.get(i)(text patientData.get(j).get(i))
- Голый факт не представляет Jess, которая может быть выполнена через
Rete.executeCommand
.
- Вы не должны использовать устаревший метод
executeCommand
; использование eval
.
- Ваши скобки не сбалансированы должным образом, 6 открывают круглые скобки против 4 закрывающих.
- Предполагая, что заголовки являются
List<String>
в вашем приложении Java, вы не можете просто вызвать вызов метода Java в Jess, который вначале не понимает синтаксис Java и (предположительно) не знает о pojo header
вообще ,
- То же самое верно для pojo
patientData
.
- Хотя вы можете передать объектам из вашей программы Java на двигатель Jess, это абсолютно невозможно для простых переменных, таких как
i
и j
.
Учитывая все это (большинство из которых легко узнать из отличной Jess руководства), используя
r.eval("(assert (answer (ident \"" +
headers.get(i) +
"\")(text \"" +
patientData.get(j).get(i) +
"\")))");
может иметь шансы на успех и в самом деле вставить новый факт в рабочую память.
Вы действительно не задали вопрос или не предоставили никакой информации о том, какую ошибку вы имеете. Пожалуйста, предоставьте более подробную информацию о том, в чем проблема. –
Ну, для начала вы не можете использовать имена переменных в строковых кавычках, потому что это будет печатать буквальное имя, а не значение. Для построения строки, содержащей переменные, вам необходимо использовать оператор строки concat. Ex: '' (answer (ident headers.get ("+ i +") (text patientData.get ("+ j +"). Get ("+ i +")) "' –
Извините, я не добавил проблему, фраза в команде будет обрабатываться как строка, а headers.get() - это переменная в Java. Использование concat не работает. –