考虑:
>> print max 5 6 7 8
6
== 8
文档说明max
只接受两个参数,所以我理解了第一行。但是从第二行看,解释器仍然能够找到任意数量的args的最大值。
这里发生了什么?返回的两个结果有什么区别?有没有办法捕获第二个?
答案 0 :(得分:5)
我真的不知道Rebol,但我注意到的是你在REPL中使用print
。第一个输出来自print
,输出max 5 6
的结果。第二个输出来自REPL,它输出整个表达式的值 - 这可能只是列表中的最后一项?如果您更改了输入的顺序,我打赌您会看到不同的结果。
答案 1 :(得分:2)
max 是最大的缩写。正如@hobbs正确猜测的那样,它需要两个参数,而你所看到的只是评估者转动曲柄的逻辑......并且变得等于表达式中的最后一个值。在这种情况下,您没有使用该结果,因此解释器会以“==”显示给您。但是你可以将整个表达式分配给变量(例如)。
您想要的是从系列中获得最大价值的东西。在DO方言中,所有函数都具有固定的arity,设计这样一个野兽的正确方法是使它成为一个参数...系列。
这样的事情确实存在,虽然没有缩写......
>> print maximum-of [5 6 7 8]
8