【问题标题】:Simple hook is not executed as expected简单的钩子没有按预期执行
【发布时间】:2013-09-30 19:43:20
【问题描述】:

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

  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,这是一个钩子,它应该被执行为y f (g y)。显然它不是那样工作的。

相反,它以~. (>./\)(即f (g y))执行,就像~. @ (>./\)一样。那么这里发生了什么?

谢谢。

【问题讨论】:

    标签: j


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 太棒了!非常感谢,现在这些概念更清晰了!
    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2021-06-09
    • 2011-09-26
    相关资源
    最近更新 更多