我正在写一本关于J的书并且有练习的答案,但我很难理解它们的工作原理.
这是一个问题:
彼得和保罗的高尔夫球得分以列表"y."的形式出现,例如3 4 4 4 5 6 3 3 7 2等.写一个表达式,给出彼得总得分与总得分之间的差异保罗的分数.写一个进一步的表达式,获得彼得和保罗18洞的总得分.
第一个问题的答案是:
-/y
Run Code Online (Sandbox Code Playgroud)
我知道这是在列表中的每个项目之间插入n-1个减法符号,有效地得到每个洞的得分差异,并在最后给出总和.
第二个问题的答案是:
(36$0 1)+//.y
Run Code Online (Sandbox Code Playgroud)
我不明白如何思考这个答案.从右到左,
显然,它告诉解释者交替地对原子求和,产生两个和.但我不知道如何/为什么.
我很感激你们能提供的任何启示.:)
使用密钥/.
:
键对所有元素x v/. y
应用动词但按 x 分组:v
y
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
Run Code Online (Sandbox Code Playgroud)
在你的情况下,分组是(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
Run Code Online (Sandbox Code Playgroud)
对于这个特殊的问题,我更喜欢做的是$
y
适当地塑造并且只是将相应的轴相加.例如:
18 2 $ y NB. or even better _2 ,\y
0 1
2 3
4 5
...
+/ 18 2 $ y
306 324
Run Code Online (Sandbox Code Playgroud)