在 J 句中从二元解释转换为一元解释

Switch from dyadic to monadic interpretation in a J sentence

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

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

   d=.1+[:?[#]
   4 d 6
2 3 1 1
   8 d 12
10 2 11 11 5 11 1 10

这是一条链:"d is one plus the (capped) roll of x occurrences of y"

但是如果我想使用 >: 来递增(并跳过上限 [: ),以便它 "switched" 在第一个 fork 之后进行 monadic 解释怎么办? 它将显示为:"d is the incremented roll of x occurrences of y"。

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

   d=.>:&?[#]
   d
>:&? ([ # ])

(如果这种方法对 J 不利,我应该坚持使用带盖的叉子,那也是有用的信息。)

让我们看一个二元分叉 a(c d f h g)b 其中 c、d、f、g 和 h 是动词,a 和 b 是论元,其计算为: (a c b) d (a f b) h (a g b) 论元是二元应用的到奇数位置的动词(或尖齿 c、f 和 g)- 这些结果按从右到左的二进位输入到偶数尖齿 d 和 h。分叉也可以是 (v v v) 或 (n v v) 的形式,其中 v 代表动词,n 代表名词。在 (n v v) 的情况下,您只需将 n 的值作为中间齿的左侧参数。

如果您查看 d=.1+[:?[#] 的原始定义,您可能会注意到它简化为具有五个叉 (1 + [: ? #) 的二元叉,其中 [ # ] 可以替换为 # 因为它是二元叉(见上面的定义)。

[: (Cap) 动词 returns 对 ? 的左参数没有值,这意味着 ? 作用于 [=20= 的结果] 并且这成为 + 的右参数,它具有 1 的左参数。

所以,关于如何摆脱 [: 并使用 >: 而不是 1 + ...

的问题

您也可以将 ([: f g) 写成 f@:g 以去掉 Cap,这意味着 ([: ? #) 变为 ?@:# 现在因为您要提供此结果进入 >: 你可以通过以下任一方式做到这一点:

   d1=.>:@:?@:# 
   d2=. [: >: ?@:#
   4 d1 6
6 6 1 5
   4 d2 6
2 3 4 5
   8 d1 12
7 6 6 4 6 9 8 7
   8 d2 12
2 10 10 9 8 12 4 3

希望这对您有所帮助,这是一个很好的关于如何评估分叉的基本问题。使用 ([: f g)f@:g 组合形式取决于您的偏好。

总结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

here (compositions) and here (trains).

对这些的一个很好的评论

通常一个动词有很多种可能的形式。更复杂的是,您可以以不同的方式混合许多基元以获得相同的结果。

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

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

>: @ ? @ $

出于同样的原因,我将 # 替换为 $。当我在这种情况下看到 # 时,我会自动阅读 "number of elements of",但也许这就是我。