如何在 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就可以了。