我正在写一本关于J的书,并且有练习的答案,但我很难理解它们的工作原理。
以下是问题:
彼得和保罗的高尔夫比分以一种形式转变 list" y。",例如3 4 4 4 5 6 3 3 7 2等。写一个表达式 它给出了彼得的总得分和得分之间的差异 保罗的得分总和。写一个获得的表达式 彼得和保罗超过18洞的总得分。
第一个问题的答案是:
-/y
据我所知,这是在列表中的每个项目之间插入n-1个减法符号,有效地得出每个洞的得分差异,并在最后给出总和。
第二个问题的答案是:
(36$0 1)+//.y
我不明白如何思考这个答案。从右到左,
我很欣赏你们能提供的任何启示。 :)
答案 0 :(得分:6)
使用键/.
:
键x v/. y
对v
的所有元素应用动词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