J中的二元钩子有什么用吗?

Is there any use for dyadic hooks in J?

我突然想到,二元钩与没有括号的相同动词具有相同的效果,例如,

2 (+ #) 1 2 3
2 + # 1 2 3

这两个产生相同的结果:5。我可以用 (+ #) 做哪些我不能用 + # 做的事情?

我认为最大的区别是你可以默认使用 hooks 来构建更复杂的动词。挂钩成为一个模块,您可以将其放入更长的叉子中。删除括号会取消挂钩的功能。

   2 (+ #) 1 2 3
5

这让我可以用 2 个零填充列表

   2 ((+ #){. ]) 1 2 3
1 2 3 0 0

这给出了不同的结果

   2 (+ # {. ]) 1 2 3
3 4 5

Dyadic hook 求解组合 "problem",其中 M 代表单元动词,D 代表二元动词。

  M@D
  (D M)

Dyadic hook 比 monadic 版本更必要,后者只是

的捷径
  (] D M)

虽然 dyadic hook 也可以建模为

  ([ D M@:])

这也是一个矛盾的表达。一个例子:

 (, *~)

单子地,追加 y 及其平方
dyadically,追加 x 以及 x 和 y 的乘积。

(哎呀,鲍勃是对的)。用以上解释纠正矛盾动词。

 ([ , *~)