Dynamic If "Power Of" 收集结果
Dynamic If "Power Of" which collects results
考虑一个 "goto" 数组,其中每个元素告诉您跳转到的下一个输入:
a=. 1 3 3 6 10 7 10 9 15 12
因此,如果我们从索引 0 开始,则值为 1,这意味着 "go to index 1"。当我们这样做时,值为 3,这意味着 "go to index 3"。那里的值是 6,所以我们跳转到索引 6,这里的值为 10。此时我们停止,因为索引 10 超出了范围。如果我们要收集结果,我们会得到:
0 1 3 6 10
实际上我们可以使用 ^:
和数组幂来做到这一点:
a {~^:(i.5) 0 NB. returns 0 1 3 6 10
问题是我必须提前知道我需要多少次迭代。
相反,我想使用 u^:v y
形式并返回布尔值 v
(它可以检查列表长度是否已超出)——但我会 也喜欢收集结果
这可能吗?
如果您使用 ,
手动进行收集,事情会很快变得冗长,尽管如果没有内置方法来执行我想要的操作,一个灵活的手动收集解决方案就足够了。
也欢迎实现相同目标的完全不同的方法。
如上所述,您可以使用 a:
到 return 中间迭代的结果。它将继续迭代,直到连续两次得到相同的结果。下面的代码将导致动词在第一次遇到无效索引时停止。这是通过使用连词 adverse ::
来捕获错误,然后 return 再次使用相同的正确参数来完成的。
a {~ ::]^:a: 0
0 1 3 6 10
标准成语是
a {~^:a: 0
由特殊代码处理。你必须确保在数组的末尾有一个额外的条目,通常是_1,来停止循环,并且链在那里结束。参见
http://code.jsoftware.com/wiki/Vocabulary/Idioms#Variable-Length_Records
考虑一个 "goto" 数组,其中每个元素告诉您跳转到的下一个输入:
a=. 1 3 3 6 10 7 10 9 15 12
因此,如果我们从索引 0 开始,则值为 1,这意味着 "go to index 1"。当我们这样做时,值为 3,这意味着 "go to index 3"。那里的值是 6,所以我们跳转到索引 6,这里的值为 10。此时我们停止,因为索引 10 超出了范围。如果我们要收集结果,我们会得到:
0 1 3 6 10
实际上我们可以使用 ^:
和数组幂来做到这一点:
a {~^:(i.5) 0 NB. returns 0 1 3 6 10
问题是我必须提前知道我需要多少次迭代。
相反,我想使用 u^:v y
形式并返回布尔值 v
(它可以检查列表长度是否已超出)——但我会 也喜欢收集结果
这可能吗?
如果您使用 ,
手动进行收集,事情会很快变得冗长,尽管如果没有内置方法来执行我想要的操作,一个灵活的手动收集解决方案就足够了。
也欢迎实现相同目标的完全不同的方法。
如上所述,您可以使用 a:
到 return 中间迭代的结果。它将继续迭代,直到连续两次得到相同的结果。下面的代码将导致动词在第一次遇到无效索引时停止。这是通过使用连词 adverse ::
来捕获错误,然后 return 再次使用相同的正确参数来完成的。
a {~ ::]^:a: 0
0 1 3 6 10
标准成语是
a {~^:a: 0
由特殊代码处理。你必须确保在数组的末尾有一个额外的条目,通常是_1,来停止循环,并且链在那里结束。参见
http://code.jsoftware.com/wiki/Vocabulary/Idioms#Variable-Length_Records