我将a
定义为数组并找到正在运行的max:
a =: 3 1 4 1 5 9 2
>./\ a
3 3 4 4 5 9 9
然后我想过滤掉重复的内容。我知道nub(~.
)这样做,所以我尝试:
~. >./\ a
3 4 5 9
它有效,但我不知道为什么。我认为它应该不起作用。 /
和\
是副词,因此(>./\)
是一个动词。然后我们有:f g y
,这是一个钩子,应该以{{1}}执行。显然它不会那样工作。
相反,它被执行为y f (g y)
(即~. (>./\)
),就像f (g y)
一样。那么这里发生了什么?
感谢。
答案 0 :(得分:4)
J从右到左执行语句,因此~. >./\ a
等同于:
~. (((>./) \) a)
如果用括号括起来,它将是一个钩子:
(~. ((>./) \)) a
一些相关讨论:function composition和how to take the train。
编辑:为了更清楚,f g y
总是 f (g y)
。如果你想要钩子,你必须写(f g) y
。