我试图通过以下方式将计划从Agent1发送到Agent2:
@c2[atomic]
+giveRule[source(A)]: planGiven(B) <-
-+planGiven(B+1);
.send(A, tellHow, "@s1 +sum(num1(X, Y), num2(A, B))[source(S)] :logic(L) & attentiveness(T)<- if ((L + T) > 2){ -+res(num1(X, Y), num2(A, B), res(X*10 + A*10 + Y + B)); .send(S, tell, result(X*10 + A*10 + Y + B)); } else { -+res(num1(X, Y), num2(A, B), res(X + A + Y + B)); .send(S, tell, result(X + A + Y + B)); }.");
-+stopGivingPlan.
然后,我试图通过从Agent1向Agent2发送消息来使该计划有效:
@c3[atomic]
+giveProbs[source(A)]: probsGiven(B) & stud(A,X)<-
-+probsGiven(B+1);
.send(A, tell, sum(num1(3,3), num2(4,9))).
它不起作用。 为什么呢?
重要补充: 如果我不发送计划,只是在Agent2中复制它,它可以正常工作。所以语法还可以。
另外,我在eclipse中使用jason插件,如果值得提及的话。
答案 0 :(得分:1)
目前尚不清楚正在执行的内容,如果您可以显示整个代码,那就更好了。我简化了案例只是为了展示一个大致的想法,如下:
Agent1代码:
!start.
+!start: true <-
.send(agent2, tellHow, "@s1 +!sum(num1(X, Y), num2(A, B))[source(S)] :true <- -+res(num1(X, Y), num2(A, B), res(X + A + Y + B)); ?res(Z1,Z2,Z3); .print(Z1,\"+\",Z2,\"=\",Z3).");
.send(agent2, achieve, sum(num1(1,2), num2(3,4))).
Agent2代码:
/* No previous code - agent1 will send a plan*/
回应应该是:
[agent2] num1(1,2)+num2(3,4)=res(10)
在这种情况下,agent2无需做任何事情,直到agent1发送计划。 Agent1还发送触发计划以实现总和。