在存在n-wise reduce的情况下APL中/(Reduce)的解析规则?
Parsing rules for / (Reduce) in APL in the presence of n-wise reduce?
我认为 APL 的解析规则很简单:在看到术语 ⍺ f ⍵
时,让函数 f
接收参数 ⍺, ⍵
。确实,对于APL中的归约/
算子,我们可以想到:
+/(1 2 3 4) ⍝ REDUCE(+, (1 2 3))
10
但是,在以下情况下,window 会抛出此逻辑:
2+/(1 2 3 4) ⍝ REDUCE(2, +, (1, 2, 3)) ?
(3 5 7)
也就是说,this的parse似乎需要在中间解析树中two behind --- one behind来检索运算符+
,和后面两个检索数字 2
。
这使我关于如何读取和解析 APL 表达式的心智模型变得非常复杂 --- 我在这里遗漏了什么吗?或者,如果这实际上是如何工作的,是否还有其他 APL 运算符 "look behind" 多于 1 个子表达式?
作为 APL 的介绍,关于函数和数组的简单规则就足够了,但是一旦您将运算符(尤其是二元运算符)混入其中,事情就会变得有点复杂。虽然 functions/arrays 规则仍然适用,但现在可以使用一个或多个运算符 派生 函数。事实上,您最终可能会向左看很远才能找到函数 "begins".
的位置
考虑例如函数 *∘*∘*∘*
, f(a,b)=aeeeb ,上下文 2*∘*∘*∘*3
:
3
这是我们的数组
*
也许我们会把这个函数单子应用到3
,但这取决于…
∘
nope:这是一个二元运算符,它"grabs"右边的*
派生了一个新函数
*
也许这是∘
的左操作数,但这取决于…
∘
nope:这是一个二元运算符,它"grabs"右边的*
派生了一个新函数
*
也许这是∘
的左操作数,但这取决于…
等等
事实上,这就是我在脑海中解析 APL 的方式。然而,更精确的整体方法是根据 documentation and the model implementation
使用绑定强度 table
我认为 APL 的解析规则很简单:在看到术语 ⍺ f ⍵
时,让函数 f
接收参数 ⍺, ⍵
。确实,对于APL中的归约/
算子,我们可以想到:
+/(1 2 3 4) ⍝ REDUCE(+, (1 2 3))
10
但是,在以下情况下,window 会抛出此逻辑:
2+/(1 2 3 4) ⍝ REDUCE(2, +, (1, 2, 3)) ?
(3 5 7)
也就是说,this的parse似乎需要在中间解析树中two behind --- one behind来检索运算符+
,和后面两个检索数字 2
。
这使我关于如何读取和解析 APL 表达式的心智模型变得非常复杂 --- 我在这里遗漏了什么吗?或者,如果这实际上是如何工作的,是否还有其他 APL 运算符 "look behind" 多于 1 个子表达式?
作为 APL 的介绍,关于函数和数组的简单规则就足够了,但是一旦您将运算符(尤其是二元运算符)混入其中,事情就会变得有点复杂。虽然 functions/arrays 规则仍然适用,但现在可以使用一个或多个运算符 派生 函数。事实上,您最终可能会向左看很远才能找到函数 "begins".
的位置考虑例如函数 *∘*∘*∘*
, f(a,b)=aeeeb ,上下文 2*∘*∘*∘*3
:
3
这是我们的数组
*
也许我们会把这个函数单子应用到3
,但这取决于…
∘
nope:这是一个二元运算符,它"grabs"右边的*
派生了一个新函数
*
也许这是∘
的左操作数,但这取决于…
∘
nope:这是一个二元运算符,它"grabs"右边的*
派生了一个新函数
*
也许这是∘
的左操作数,但这取决于…
等等
事实上,这就是我在脑海中解析 APL 的方式。然而,更精确的整体方法是根据 documentation and the model implementation
使用绑定强度 table