J 句子中从二元解释切换到一元解释

duk*_*reg 3 refactoring j

在努力混合和匹配不同的阶段之后,我试图理解 J 中的构图。我需要帮助在同一个句子中的一元短语和二元短语之间切换。

我刚刚用J做了一个简单的骰子滚轮,作为例子:

   d=.1+[:?[#]
   4 d 6
2 3 1 1
   8 d 12
10 2 11 11 5 11 1 10
Run Code Online (Sandbox Code Playgroud)

这是一条链:“d 是 1 加上 x 出现的 y 的(上限)卷”

但是,如果我想使用 >: 来递增(并跳过上限 [: ),以便它在第一个分叉后“切换”为单子解释,该怎么办?其内容为:“d 是 y 出现 x 的增量”。

像这样的东西是行不通的,尽管在我看来它具有正确的结构:

   d=.>:&?[#]
   d
>:&? ([ # ])
Run Code Online (Sandbox Code Playgroud)

(如果这种方法不适合 J,并且我应该坚持使用有盖的叉子,这也是有用的信息。)

Eel*_*vex 5

总结一下J中动词混合的主要简单模式:

          (f @: g) y    =    f (g y)             NB. (1) monadic "at"
        x (f @: g) y    =    f (x g y)           NB. (2) dyadic "at"
        x (f &: g) y    =    (g x) f (g y)       NB. (3) "appose"
          (f g h)  y    =    (f y) g (h y)       NB. (4) monadic fork 
        x (f g h)  y    =  (x f y) g (x h y)     NB. (5) dyadic  fork
            (f g)  y    =       y  f (g y)       NB. (6) monadic hook 
          x (f g)  y    =       x  f (g y)       NB. (7) dyadic  hook
Run Code Online (Sandbox Code Playgroud)

对这些的一个很好的评论是这里(作曲)这里(火车)

通常动词有多种可能的形式。让事情变得更加复杂的是,您可以以不同的方式混合许多基元来实现相同的结果。

经验、风格、表现和其他此类因素会影响您将上述内容组合起来形成动词的方式。

在这种特殊情况下,我会使用@bob's,d1因为我发现它读起来更清晰increase the roll of x copies of y::

>: @ ? @ $
Run Code Online (Sandbox Code Playgroud)

出于同样的原因,我将替换#$. 当我看到#这种情况时,我会自动阅读“元素的数量”,但也许这只是我的想法。