J的#操作员:为什么不逆转?

Syn*_*ica 3 language-design j apl

我过去几周一直在研究J,而且真正让我烦恼的是#操作员的二元情况:我使用它的唯一方法是类似于以下内容:

(1 p: a) # a
Run Code Online (Sandbox Code Playgroud)

如果相反,则可以省略括号:

a #~ 1 p: a
Run Code Online (Sandbox Code Playgroud)

为什么选择不采取与当前论点相反的方式?向后熟悉APL,或者我完全忽视的东西?

Dan*_*ron 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.