3

过去几周我一直在研究 J,真正困扰我的是#运算符的二元情况:我使用它的唯一方法类似于以下内容:

(1 p: a) # a

如果反过来,括号可以省略:

a #~ 1 p: a

为什么选择不采取与当前论点相反的方式?向后熟悉 APL,还是我完全忽略了一些东西?

4

1 回答 1

6

一般来说,J 的原语被设计成在右侧获取“主要数据”,在左侧获取“控制数据”。

“主要”和“控制”数据之间的区别并不明显,但通常人们会期望“主要”数据比“控制”数据更频繁地变化。也就是说,人们会期望“控制”数据比“主要”数据更不可能被计算。

该设计选择的原因正如您所指出的那样:因为如果更有可能计算的数据(而不是高级固定)出现在右侧,那么更多的 J 短语可以表示为简单的火车或管道动词,没有过多的括号(假设 J 从左到右执行)。

现在,在 的情况下#,哪个数据更有可能被计算?您很可能会计算过滤器(或掩码),这是 100% 正确的。但是,要过滤的数据几乎肯定是要计算的。a例如,你从哪里得到的?

QED。

PS:如果你a可以用某个J动词来计算,如a=: ...,那么你的整个结果,过滤器和所有,都可以用 来表示primeAs =: 1&p: # ...

PPS:注意1&p:, 那里。这是“控制”与“主要”的另一个例子:这1是控制数据——你可以说出来,因为它永远绑定到p:——而且它是固定的。因此,不巧的是,p:它被设计为将其视为左派论点。

PPPS:这个“控制数据出现在左边”的概念有很多不同的表达方式。你可以在这里找到一份老将 Jers 的解释:http: //www.jsoftware.com/pipermail/general/2007-May/030079.html

于 2014-05-12T14:52:21.327 回答