1

我定义a为一个数组并找到运行最大值:

  a =: 3 1 4 1 5 9 2
  >./\ a
3 3 4 4 5 9 9

然后我想过滤掉重复项。我知道 nub ( ~.) 这样做,所以我尝试:

  ~. >./\ a
3 4 5 9

它有效,但我不知道为什么。我认为它不应该工作。/and\是副词,(>./\)动词也是。然后我们有: f g y,这是一个钩子,它应该被执行为y f (g y)。显然它不是那样工作的。

相反,它被执行为~. (>./\)(ie f (g y)),就像它是~. @ (>./\). 那么这里发生了什么?

谢谢。

4

1 回答 1

4

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

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

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

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

一些相关的讨论:功能组成如何乘坐火车

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

于 2013-09-03T13:30:57.450 回答