Si answer
est un deftemplate avec des fentes ident
et text
, l'extrait suivant ressemble à la construction d'un fait:
(answer(ident headers.get(i)(text patientData.get(j).get(i))
- Un simple fait ne représente pas un Commande Jess qui peut être exécutée via
Rete.executeCommand
.
- Vous ne devez pas utiliser la méthode obsolète
executeCommand
; utiliser eval
.
- Vos parenthèses ne sont pas équilibrées correctement, 6 parenthèses ouvrantes contre 4 fermantes.
- En supposant que les en-têtes est un
List<String>
dans votre application Java, vous ne pouvez pas simplement lancer un appel de méthode Java à Jess, qui ne comprend pas la syntaxe Java en premier lieu et (vraisemblablement) ne connaît pas le pojo header
. Il en va de même pour le pojo patientData
.
- Alors que vous pourriez passer objets depuis votre programme Java vers le moteur Jess, ceci est absolument impossible pour les variables simples comme
i
et j
.
Considérant tout cela (dont la plupart est facile à apprendre de l'excellent manuel Jess), en utilisant
r.eval("(assert (answer (ident \"" +
headers.get(i) +
"\")(text \"" +
patientData.get(j).get(i) +
"\")))");
pourrait avoir une chance de réussir et même insérer un fait nouveau dans la mémoire de travail.
vous n'avez pas posé de question ou fourni d'informations sur l'erreur que vous rencontrez. S'il vous plaît fournir plus d'informations sur exactement quel est le problème. –
Eh bien, pour commencer, vous ne pouvez pas utiliser de noms de variables dans les guillemets, car cela affichera le nom littéral, pas la valeur. Vous devez utiliser l'opérateur de chaîne concat pour créer une chaîne contenant des variables. Ex: '" (réponse (ident headers.get ("+ i +") (texte patientData.get ("+ j +"). Get ("+ i +")) "' –
Désolé, je n'ai pas ajouté le problème, Le tout phrase dans la commande sera traitée comme une chaîne, tandis que le headers.get() est une variable en Java.utiliser la concat ne semble pas fonctionner –