2016-05-21 2 views
0

установки на пример правиле AssertingHasSiblingMulti1 для настройки несколько слотов данного в AddingRuleWithJessTab я создал следующее правило Jess для установки значений нескольких слотов на моем foundPollutionSources собственности:Джесс в Protege: мульти-слот проблема

(defrule findPHPolluters 
(declare (salience 553)) 
    (object 
     (is-a http..#PollutionSources)    
     (OBJECT ?sitepoll)   
     (http..potentialPollutant   
     $? ?b&:(eq (instance-name ?b)(instance-name http..#pH)) $?) 
     (http..#pollutionSourceName ?psName) 
     (http..#pollutionType ?psType) 
    )  
    (object 
     (is-a http..#MeasurementSite) 
     (OBJECT ?loc) 
     (http..#hasSourcesOfPollution $?sitepoll_list) 
    ) 
    (object 
      (is-a http..#ModeratePHMeasurement) 
      (OBJECT ?mob) 
      (http..#observationResultLocation ?loc) 
      (http..#foundPollutionSources $?existing_poll_list) 
    ) 
=> 
    (if (not (member$ ?sitepoll $?sitepoll_list)) then 
    (printout t "pH pollution source: " ?psName " (Location: " ?psType ")" crlf) 
    (slot-set ?mob http..#foundPollutionSources (create$ $?existing_poll_list ?sitepoll)) 
    )  
) 

Но, когда я запускаю это правило появляется следующее исключение:

Джесс сообщила об ошибке в рутинной ValueVector.set при выполнении правила LHS (MTELN) при выполнении правила LHS (TECT). Сообщение: Bad индекс 117 в вызове, чтобы установить() на этом векторе: ...

ответ

0

Существует отклонение от обычного режима использования Джесса переменного, связанных с (части) многощелевым значением. Обратите внимание:

(object 
    ... 
    (http..#foundPollutionSources $?existing_poll_list)) 

Префиксальный «$» вызывает все значения в слоте foundPollutionSources быть привязанными к ?existing_poll_list. Обычное использование (см руководства Jess и связанного, например) будет, например:

(printout t "pollution sources " ?existing_poll_list crlf)) 

Но ваш код RHS имеет

(create$ $?existing_poll_list ...) 

Обратите внимание на паразитный «$» - Я бы опустить это и повторите попытку.

Я не знаю, что может сделать этот протеже и/или Джесс, и у меня нет времени исследовать его в последнем.

+0

Я не хочу распечатывать экземпляры, которые вы говорите, но вместо этого я хотел бы заполнить значения слота foundPollutionSources экземплярами? Sitepoll. Я попытался удалить символ «$», ошибка не появляется, но еще раз цель не достигнута – Edi

 Смежные вопросы

  • Нет связанных вопросов^_^