为什么右动词]返回值而不返回左动词[?

时间:2018-12-20 10:42:46

标签: j

J新手在这里。

动词 right ]给出了返回赋值结果的平均值。我猜想x =: 1的值是1,然后传递给],它返回正确参数的值(或者可能是],它使赋值有一个值)。

   ] x =: 1
1
   x
1

但是不适用于 left [。这是为什么 ?我认为将x =: 1放在[的左侧就足够了。两者有什么区别?

   x =: 1 [
|syntax error
|   x=:    1[

此外,当我们评估下面的表达式时,控制台上没有反馈,分配已静默进行。为什么会这样?

   x =: i.10 [ n =: 2
   x
0 1 2 3 4 5 6 7 8 9
   n
2

1 个答案:

答案 0 :(得分:3)

一元应用(即仅带有正确的参数)时,[]都是动词Same,它的参数不变。 x =: 1 [出现语法错误的原因是,您试图仅用一个左参数对[进行二分法(即有两个参数)求值。

最后一个示例中的输出与求值顺序有关-在J中,此过程从右到左发生。 这意味着x =: i.10 [ n =: 2x =: (i. (10 [ (n =: 2)))相同,其评估如下:

  1. n =: 2,即n被赋值为2,然后在下一个动词中使用结果
  2. 10 [ n,即10个 n,仅10个
  3. i.10,即0 1 2 3 4 5 6 7 8 9
  4. x =: 0 1 2 3 4 5 6 7 8 9

没有任何内容打印到控制台上,因为最后一个动作是分配。 在这里,您可以使用[](通常)来打印除分配(即

)外的最终结果
    ] x=: i.10 [ n =: 2
0 1 2 3 4 5 6 7 8 9