为什么rebol解释器会返回不同的结果?

时间:2013-03-30 16:05:03

标签: rebol

考虑:

>> print max 5 6 7 8
6
== 8

文档说明max只接受两个参数,所以我理解了第一行。但是从第二行看,解释器仍然能够找到任意数量的args的最大值。

这里发生了什么?返回的两个结果有什么区别?有没有办法捕获第二个?

2 个答案:

答案 0 :(得分:5)

我真的不知道Rebol,但我注意到的是你在REPL中使用print。第一个输出来自print,输出max 5 6的结果。第二个输出来自REPL,它输出整个表达式的值 - 这可能只是列表中的最后一项?如果您更改了输入的顺序,我打赌您会看到不同的结果。

答案 1 :(得分:2)

max 最大的缩写。正如@hobbs正确猜测的那样,它需要两个参数,而你所看到的只是评估者转动曲柄的逻辑......并且变得等于表达式中的最后一个值。在这种情况下,您没有使用该结果,因此解释器会以“==”显示给您。但是你可以将整个表达式分配给变量(例如)。

您想要的是从系列中获得最大价值的东西。在DO方言中,所有函数都具有固定的arity,设计这样一个野兽的正确方法是使它成为一个参数...系列。

这样的事情确实存在,虽然没有缩写......

>> print maximum-of [5 6 7 8]
8