Как отправить правило для другого агента в Jason? - PullRequest
2 голосов
/ 07 апреля 2019

Джейсон идет с демо-версией, которая использует перформативное «tellRule» для отправки правил, но в моих тестах это не работает.Я попытался отправить самому агенту так:

.send(self,tellRule, [{a :- b & c}])

Результат был:

Command .send(self,tellRule, [{a :- b & c}]): included for execution
Communication error -- no_applicable: Found a goal for which there is no applicable plan:+!kqml_received(self,tellRule,[{ a :- (b & c)}],mid511)

1 Ответ

2 голосов
/ 07 апреля 2019

На самом деле, у Джейсона нет перформатива «tellRule», определенного по умолчанию. Фактически, упомянутое demo учит, как добавить перформатив KQML. Итак, чтобы ваш код работал, вы должны сначала создать «tellRule», сделав так:

.send(self, tellHow, {+!kqml_received(A,tellRule,Rules,_) <- 
    .print("Received rule(s) ",Rules, " from ",A); 
    for ( .member(R, Rules) ) 
    {+R[source(A)];}  
    .relevant_rules(_,LR);       
    .print("Rules: ",LR)}).

После этого вы можете запустить команду:

.send(self,tellRule, [{a :- b & c}]).

Кстати, эту же идею можно использовать для создания чего-то вроде "untellRule":

.send(self, tellHow, {+!kqml_received(A,untellRule,Rules,_) <-      
    .print("Removing rule(s) ",Rules, " from ",A);      
    for ( .member(R, Rules) )      
    {-R}}).
.send(self,untellRule,[{a :- b & c}]).
...