这是一个非常简单的问题,但我似乎无法在任何地方找到答案 - 将数字列表映射到列表值总和的百分比(例如,1 2 2 - > 0.2 0.4 0.4 ),你可以编写函数
func =: %+/
但只是写%+/ numbers
numbers
是一个数字列表不起作用 - 这是为什么?为什么需要在函数组合周围加上括号?
答案 0 :(得分:1)
有两个相关的规则: J中的表达不会产生相关性。 当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.
答案 1 :(得分: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)
另请注意,副词不会分裂。即/
不能自立。
答案 2 :(得分:1)
J Wiki上以下两个常见问题解答的答案应该有助于解释为什么会出现这种情况。