2017-01-20 29 views
0

Я не могу сопоставить значение (String) объекта jess, а сравнительное значение представляет собой комбинацию строки и другого поля.Jess-Rule: Str-Cat в сравнении полей doen't compile

Вот простой ("работоспособный"), например:

(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") 
) 

Но код не компилируется в JessTab. Кажется, что после имени поля "имени" "(" не допускаются

Ошибка.

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. 

Как я могу это исправить

Спасибо? аванс

ответ

1

Для соответствия шаблону значению, возвращаемому функцией, перед вызовом функции необходимо иметь знак равенства - то есть "(name = (str-cat ..."

+0

спасибо. Это делает мой день :-) – user2667549

+0

изменил его на [...] (email = (str-cat (имя-slot-get? TmpPerson name) "@mail")) (моя ошибка, я хотел набрать «email» -Slot а не «имя») – user2667549