在 J 中构建动词数组

Building an array of verbs in J

是否可以构建动词数组? 我试过这个:

f =: >:
f2 =: f f

没有语法错误,但 f2 显然不是动词数组。 例如

f2 yields f f
$ f2 yields $ f2
0 { f2 yields 0 { f2

2 3 $ f behaves in a similar way.

我也想知道动词是否可以被名字激活

已编辑

而不是f2 =: f f,这是一个组合,让我们有

f =: >:
f2 =: 2 1 $ f

f2 yields 2 1 $ f
$ f2 yields $ f2
0 { f2 yields 0 { f2

似乎f2表示序列2 1 $ f,而在原子的情况下,例如2 1 $ 7,右边是向量

正如评论所指出的,f2=: f f 创建了一个组合,f3=: 2 1 $ f 也创建了一个组合。在 f2 的情况下,您正在定义一个钩子,而在 f3 的情况下,您正在定义一个叉子,当给定一个参数时,它将采用 f 和 [=23] 的结果=] 结果的 2 1 形状。它只是模仿你的输入的原因是 J 显示不带参数的动词的方式。它向您展示了结构,因为它不知道动词将应用于什么。

我想你可能想要的是将动词变成动名词的过程,动名词是动词的名词形式,可以通过多种方式激活。创建动名词是通过在两个动词之间插入反引号或对于单个动词,在动词和空字符串之间插入反引号来完成的。适用于动名词的连词示例有 Agenda 和 Evoke Gerund。

虽然这可以在 J 中完成,但它非常笨拙,因为除了将动词变成动名词外,J 没有 meta-operators 将动词当作名词来操作所必需的。

函数集合在 J 中称为 gerund 并使用勾号“`”构成:

g =: +`-`f
┌─┬─┬─┐
│+│-│f│
└─┴─┴─┘

您可以使用 @. 通过其索引来应用适当的动词:

4 2 3 (g @. 0) 1 5 6
5 7 9
4 2 3 (g @. 1) 1 5 6
3 _3 _3
4 2 3 (g @. 2) 1 5 6
1 0 0

NB. defining a 2x2 gerund:
k =: 2 2 $ +`-`*`%
┌─┬─┐
│+│-│
├─┼─┤
│*│%│
└─┴─┘

1 (((<0 0) { k) @. 0) 2
3
1 (((<0 1) { k) @. 0) 2
_1
1 (((<1 0) { k) @. 0) 2
2
1 (((<1 1) { k) @. 0) 2
0.5

索引也可以是依赖于参数或索引列表的新动词。