在 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",但也许这就是我。
在努力混合和匹配不同阶段之后,我正在尝试理解 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",但也许这就是我。