在存在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"右边的*派生了一个新函数

* 也许这是的左操作数,但这取决于…

等等

事实上,这就是我在脑海中解析 A​​PL 的方式。然而,更精确的整体方法是根据 documentation and the model implementation

使用绑定强度 table