我有三个用Agentspeak编写的运行中的代理。其中两个代理有一个belief +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
将能正常工作。