gpt4 book ai didi

j - 如何从 J 中的数组创建动名词?

转载 作者:行者123 更新时间:2023-12-04 11:04:16 27 4
gpt4 key购买 nike

在J中,我们可以使用"_来产生常量函数:

   k100 =. 100"_
k200 =. 200"_

这些可以与其他动词一起用在动名词中:

   (+:`k100`k200`-:)`:0 [ 256
512 100 200 128

如何直接从数组创建动名词?

也就是说,我想定义 k 以便它生成常量动词的动名词,如下所示:

   gk =: k 100 200     NB. (or '100 200 k' if it needs to be an adverb.)
gk@.(0)''
100
gk@.(1)''
200

最佳答案

我同意@eelvex 的说法,这闻起来像 XY Problem .使用你的例子,你能给我们一个用例来说明你为什么喜欢写

  gk =: k 100 200 300

gk@.0''
100
gk@.1''
200

代替

  GK =: 100 200 300
0 { GK
100
1 { GK
200

甚至

  100*1+  0
100
100*1+ 1
200

等等?

通常,使用连词 (@.) 而不是动词 ({) 会限制您的运行时灵 active 并增加代码复杂性,因此通常您如果可以的话,我宁愿后者胜过前者。

只有当你想产生非名词结果(即动词或其他连词或副词)或者如果你需要它们更高的结合力时才真正需要连词,但在你的情况下,因为你将名词作为输入并且简单地生成它的元素作为输出,我不认为需要连接,或者支付复杂性税的理由。取一个名词(数组)并产生一个名词结果是动词存在的理由,也是 J 代码中最常见的结构。

综上所述,编写k并不难。

   k=:[^:(__-:])L:_ 0" _1 0&({. __"_`'')

在这里,我们以一个示例动名词(常量动词的名词形式)作为模板,然后将空格(__)替换为我们希望常量函数产生的值。基本上,我们为数组中的每一项制作一份 __"_,并将 __ 替换为该项目。因此 100 200 300 变为 (100"_)`(200"_)`(300"_):

   gk=:k 100 200 300
gk@.0 ''
100
gk@.1 ''
200

但我还是不推荐这种方法,除非你面临的问题不能用简单的动词解决,例如 {&100 200 300(100 * 1 + ]),或者使用动名词方法的 yield 在灵 active 、复杂性和清晰度方面抵消了成本。

如果您更详细地描述您的具体问题,我们可以帮助您权衡这些选择。

关于j - 如何从 J 中的数组创建动名词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21898628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com