2017-01-20 3 views
0

Je ne voulais pas faire correspondre une valeur (String) d'un objet-jess et la valeur comparative est une combinaison d'une chaîne et d'un autre champ.Jess-Rule: Comparaison de Str-Cat in Field Ne pas compiler

Voici un simple ("runnable") Exemple:

(defclass Person (is-a :THING) (slot name (type string)) (slot email (type string))) 
(mapclass Person) 

(make-instance Andy of Person (name "Andy") (email "[email protected]")) 

(defrule search 
(object (OBJECT ?tmpPerson) 
    (is-a Person) 
    (email (str-cat (slot-get ?tmpPerson name) "@mail")) 
) 
=> 
(print t "found") 
) 

Mais le code ne compile pas JessTab. Il semble que, après le nom du champ "nom" le "(" n'est pas autorisé

Erreur:.

Jess reported an error in routine Jesp.parsePattern. 
    Message: Bad slot value at token '('. 
    Program text: (defrule search (object (OBJECT ?tmpPerson) (is-a Person) (name ( at line 5. 

Comment puis-je résoudre ce problème

Merci à? avance

Répondre

1

Pour faire correspondre un motif à la valeur renvoyée par une fonction, vous devez précéder l'appel de fonction d'un signe égal, c'est-à-dire "(name = (str-cat ..."

+0

Merci beaucoup. Cela rend ma journée :-) – user2667549

+0

l'a changé en [...] (email = (str-cat (nom de slot-get? TmpPerson) "@mail")) (mon erreur, je voulais taper "email" -Slot et pas "nom") – user2667549