这是我最近测试的一个片段。它需要两个直径(⍺,⍵
)并计算圆的周长:
10{(○1×⍺){⍺ ⍵}○1×⍵}10 ⍝ note the brackets around ⍺
31.4159 31.4159
10{○1×⍺{⍺ ⍵}○1×⍵}10
31.4159 98.696
我想了解这个表达式的评估是如何工作的 - 为什么第一个正确评估,第二个不是?
我正在使用Dyalog APL。
答案 0 :(得分:5)
你有嵌套的功能。在这两种情况下,内部函数只返回其左右参数。在第一种情况下,内部函数的左参数是表达式(○1×⍺),在第二种情况下,内部函数的左参数只是⍺,或者外部函数的未改变的左参数 - 然后是整个内部函数的结果乘以○和1。
请注意,circle函数的参数是右边的所有内容,因此1 x完全是多余的。
在APL中,表达式从右到左进行评估。我们可以说,除非由parens修改,否则函数适用于其右边的所有内容。因此我们可以说在第一个表达式中,○取1乘以右边的所有东西,因为括号只有⍺。但是在第二个表达式中,○取1乘以右边的内容,这是内部函数的结果。
此外,请注意,由于标量扩展,您可以计算两个没有大括号的数字:
○10 10
31.415926535898 31.415926535898
不同直径更有趣:
○10 15 20
31.415926535898 47.123889803847 62.831853071796