1

这是一个非常简单的问题,但我似乎无法在任何地方找到答案——将数字列表映射到它们在列表值总和中的百分比(例如,1 2 2 -> 0.2 0.4 0.4),你可以编写函数

func =: %+/

但是仅仅写一个数字列表%+/ numbers在哪里numbers是行不通的——这是为什么呢?为什么需要在函数组合周围加上括号?

4

3 回答 3

2

有两个相关规则: 1. J 中的表达式不屈服于结合性。2. 当 J 看到一个动词时,它会隐含地在它周围添加一个括号。

 %+/ 1 2 2 = % (+/ 1 2 2)!= (%+/) 1 2 2 and 
 func 1 2 2 =  (%+/) 1 2 2 = 1 2 2  % (+/1 2 2) = 0.2 0.4 0.4, which is a hook.  
于 2013-06-14T19:32:09.097 回答
1

J 从右到左计算每个表达式,除非它看到括号(在这种情况下,它计算括号中的表达式 - 从右到左 -然后继续向左)。

例子:

1 - 2 - 3 - 4 - 5
3                  NB. because it's: 1 - (2 - (3 - (4 - 5)))

%+/ 1 2 3
0.166667           NB. because it's: % (+/ 1 2 3) -> % (1 + (2 + 3))

(%+)/ 1 2 3
1.5                NB. because it's: 1 (%+) (2 (%+) 3)

另请注意,副词不会拆分。即/不能自立。

于 2013-06-14T20:00:06.217 回答
1

J Wiki 上以下两个常见问题的答案应该有助于解释为什么会这样。

于 2013-06-16T06:43:15.217 回答