syn*_*gma 2 evaluation apl operator-precedence dyalog
这是我最近测试的一个片段.它需要两个直径(?,?)并计算圆周长:
10{(?1×?){? ?}?1×?}10 ? note the brackets around ?
31.4159 31.4159
10{?1×?{? ?}?1×?}10
31.4159 98.696
Run Code Online (Sandbox Code Playgroud)
我想了解这个表达式的评估是如何工作的 - 为什么第一个正确评估,第二个不正确?
我正在使用Dyalog APL.
你有嵌套的功能.在这两种情况下,内部函数只返回其左右参数.在第一种情况下,内部函数的左参数是表达式(○1×⍺),在第二种情况下,内部函数的左参数只是⍺,或者外部函数的未改变的左参数 - 然后是整个内部函数的结果乘以○和1.
请注意,circle函数的参数是其右侧的所有内容,因此1 x完全是冗余的.
在APL中,表达式从右到左进行计算.我们可以说,除非由parens修改,否则函数适用于其右边的所有内容.因此我们可以说在第一个表达式中,○取1乘以右边的所有东西,因为括号只有⍺.但是在第二个表达式中,○取1乘以右边的内容,这是内部函数的结果.
此外,请注意,由于标量扩展,您可以计算两个没有大括号的数字:
?10 10
31.415926535898 31.415926535898
Run Code Online (Sandbox Code Playgroud)
更有趣的是不同的直径:
?10 15 20
31.415926535898 47.123889803847 62.831853071796
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |