简单挂钩未按预期执行

时间:2013-09-03 10:59:01

标签: j

我将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)一样。那么这里发生了什么?

感谢。

1 个答案:

答案 0 :(得分:4)

J从右到左执行语句,因此~. >./\ a等同于:

~. (((>./) \) a)

如果用括号括起来,它将是一个钩子:

(~.  ((>./) \)) a

一些相关讨论:function compositionhow to take the train

编辑:为了更清楚,f g y 总是 f (g y)。如果你想要钩子,你必须写(f g) y