如何在 Agentspeak 中获取文字的值
How to get the value of a literal in Agentspeak
A 有 3 名工作人员用 agentspeak 编写。其中两个有一个信念 +number(someNumber),第三个试图计算这两个中的最小值。我现在拥有的是中间代理从两个代理接收两个文字,但由于两者都是文字,因此不能在此处使用正常的 math.min() 操作:
+!test: iam(root) <-
.send("agent14", askOne, number(RE), L);
.send("agent15", askOne, number(RE2), R);
.print("Both got numbers: ", L, " ", R);
+number(math.min(L, R));
.print("DONE").
此处 math.min() 函数产生错误,因为它未针对数据类型实现:
[ArithFunctionTerm] Error in 'math.min(L,R)' (agent.asl:36) -- error in evaluate!
jason.JasonException: math.min is not implemented for type 'number(65)[source(agent14)]'.
有没有办法比较这两个值?
问题的根源是askOne的答案:一个和刚才问的同类型的字面量。因此 L 与 number(65)
统一,R 与 number(<somenumber>)
统一。由于它们是文字(而不是数字),因此 math.min
不能使用它们。
解决方案是在 .send
的第四个参数中利用统一:
.send("agent14", askOne, number(RE), number(L));
.send("agent15", askOne, number(RE2), number(R));
现在L和R统一了数字,math.min
就可以了。
A 有 3 名工作人员用 agentspeak 编写。其中两个有一个信念 +number(someNumber),第三个试图计算这两个中的最小值。我现在拥有的是中间代理从两个代理接收两个文字,但由于两者都是文字,因此不能在此处使用正常的 math.min() 操作:
+!test: iam(root) <-
.send("agent14", askOne, number(RE), L);
.send("agent15", askOne, number(RE2), R);
.print("Both got numbers: ", L, " ", R);
+number(math.min(L, R));
.print("DONE").
此处 math.min() 函数产生错误,因为它未针对数据类型实现:
[ArithFunctionTerm] Error in 'math.min(L,R)' (agent.asl:36) -- error in evaluate!
jason.JasonException: math.min is not implemented for type 'number(65)[source(agent14)]'.
有没有办法比较这两个值?
问题的根源是askOne的答案:一个和刚才问的同类型的字面量。因此 L 与 number(65)
统一,R 与 number(<somenumber>)
统一。由于它们是文字(而不是数字),因此 math.min
不能使用它们。
解决方案是在 .send
的第四个参数中利用统一:
.send("agent14", askOne, number(RE), number(L));
.send("agent15", askOne, number(RE2), number(R));
现在L和R统一了数字,math.min
就可以了。