了解从J

时间:2018-01-31 19:27:07

标签: j

我正在写一本关于J的书,并且有练习的答案,但我很难理解它们的工作原理。

以下是问题:

  彼得和保罗的高尔夫比分以一种形式转变   list" y。",例如3 4 4 4 5 6 3 3 7 2等。写一个表达式   它给出了彼得的总得分和得分之间的差异   保罗的得分总和。写一个获得的表达式   彼得和保罗超过18洞的总得分。

第一个问题的答案是:

-/y

据我所知,这是在列表中的每个项目之间插入n-1个减法符号,有效地得出每个洞的得分差异,并在最后给出总和。

第二个问题的答案是:

(36$0 1)+//.y

我不明白如何思考这个答案。从右到左,

  1. 您正在接受列表" y"
  2. 将动词的n-1个副本插入该列表
  3. 然后" + /"告诉你,你将以特定的方式做到这一点......
  4. 括号内的二元句告诉你...... ???这就是我迷路的地方。
  5. 显然,它告诉翻译人员交替对原子求和,产生两个和。但我不知道如何/为什么。

    我很欣赏你们能提供的任何启示。 :)

1 个答案:

答案 0 :(得分:6)

使用/.

x v/. yv的所有元素应用动词y,但 x分组:

0 0 1 0 1 2 < /. 1 2 3 4 5 6
┌─────┬───┬─┐
│1 2 4│3 5│6│
└─────┴───┴─┘

0 0 1 0 1 2 +/ /. 1 2 3 4 5 6
7 8 6

在您的情况下,分组为(36 $ 0 1),要应用的动词为+/(让我们说y =: i.36):

36 $ 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
(36 $ 0 1) < /. y
┌────────────────────────────────────────────────┬────────────────────────────────────────────────┐
│0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34│1 3 5 7 9 11 13 15 17 19 21  23 25 27 29 31 33 35│
└────────────────────────────────────────────────┴────────────────────────────────────────────────┘
(36 $ 0 1) +//. y
306 324

对于这个特殊问题,我更喜欢做的是适当地塑造$ y并将相应的轴相加。例如:

18 2 $ y     NB. or even better _2 ,\y
0  1
2  3
4  5
...
+/ 18 2 $ y
306 324