gpt4 book ai didi

j - 重复动词应用并将结果存储在向量中

转载 作者:行者123 更新时间:2023-12-04 12:20:01 24 4
gpt4 key购买 nike

假设我有一个动词 v ,例如,定义为 v=.>:@*: , 我想申请 v到某个初始值 n次,并将所有中间结果存储在一个向量中,如下所示 n=4和初始值 22 5 26 677 458330
我不确定如何在应用动词时“扩展”向量,尽管我知道可能可以使用 ^:做申请n次。

请帮忙。

最佳答案

J 具有用于此操作和相关操作的内置运算符:^: (读“权力”)。您正在寻找的特定种类的权力是当它的右手参数是一个盒装数字(或数字)时:

   v^:(<n) initial_value

如/:
   >:@*:^:(<1+4) 2
2 5 26 677 458330

要使其成为可重用的动词(对 n 和初始值进行抽象):
   vv =: >:@*:@]^:(<@>:@[)
4 vv 2
2 5 26 677 458330

要使其成为可重用的副词(抽象于 n 、初始值和 v ):
   V =: (@]) (^:(<@>:@[))
4 >:@*: V 2
2 5 26 677 458330

请注意 ^:还有其他口味。例如,如果它的右侧参数是一个未装箱的数字(或多个数字),它只会应用该函数 N 次并生成最终值,而不是构建一个中间值向量。

或者,如果它的右手边的参数是无限的,它将把函数应用到它的不动点。或者,将这两个观察结果结合起来,如果其右侧参数是装箱且无限的,则它将函数应用于其不动点,沿途构建一个中间值向量。还有很多其他巧妙的技巧。

PS:编写函数 >:与功能 *:使用 @>:@*:将正确产生输入平方加一。

但是,由于 @被定义为像一条流水线一样,传递 *: 的每个输出至 >:单独地,后一个动词(增量)将被调用 #y次。使用 @: 可以更有效地获得相同的结果("atop") 代替 @ (“在”)。

作为组合运算符, @:与其说是流水线,不如说更像是料斗:它在等待 *:完成处理,将所有结果收集在一起,并将它们传递给 >:一气呵成。

鉴于 J 的面向数组的性质,经验法则是“从大处着眼”。也就是让每个基元看到尽可能多的数据,让解释器管理细节。在您学习 J 时,可能值得采用“使用 @: 而不是 @”作为一揽子规则,直到您掌握细微差别为止。

关于j - 重复动词应用并将结果存储在向量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200616/

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