2017-01-20 8 views
0

jess-object의 값 (String)과 일치하지 않으며 비교 값은 문자열과 다른 필드의 조합입니다. 다음은 간단한 ("실행 가능한") 예를Jess-Rule : Str-Cat in field comparison doom'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. 

감사에서? advance

답변

1

함수에서 반환 된 값과 패턴을 일치 시키려면 함수 호출 앞에 등호가 있어야합니다. 즉, "(name = (str-cat ...)"

+0

고맙습니다. 이것은 나의 하루를 만든다 :-) – user2667549

+0

는 그것을 [...] (전자 메일 = (str-cat (slot-get? tmpPerson name) "@mail")로 변경했다)) (나의 실수, 나는 "email"-Slot "이름"이 아님) – user2667549