动态如果"权力"收集结果

时间:2017-07-30 03:46:16

标签: j

考虑一下" goto"数组,其中每个元素告诉您要跳转到的下一个输入:

date_data()[match(input$project_name, date_data()$Project), ]

因此,如果我们从索引0开始,则值为1,这意味着"转到索引1"。当我们这样做时,值为3,这意味着"转到索引3"。那里的值是6,所以我们跳转到索引6,其中值为10.此时我们停止,因为索引10超出界限。如果我们要收集结果,我们会得到:

a=. 1 3 3 6 10 7 10 9 15 12

事实上,我们可以使用0 1 3 6 10 和数组功能来执行此操作:

^:

问题是我必须事先知道我需要多少次迭代。

相反,我希望使用a {~^:(i.5) 0 NB. returns 0 1 3 6 10 表单并返回布尔值u^:v y(它可以检查是否已超出列表长度) - 但我是喜欢收集结果。

这可能吗?

如果您使用v手动执行该集合,事情会很快变得冗长,尽管如果没有内置方法可以执行我想要的操作,那么灵活的手动集合解决方案就足够了。

也欢迎实现相同目标的完全不同的方法。

2 个答案:

答案 0 :(得分:4)

如上所述,您可以使用a:返回中间迭代的结果。它将继续迭代,直到它连续两次获得相同的结果。下面的代码将导致动词在第一次遇到无效索引时停止。这是通过使用连接adverse ::来捕获错误,然后再次返回相同的右参数来完成的。

   a {~ ::]^:a: 0
0 1 3 6 10

答案 1 :(得分:2)

标准习语是

a {~^:a: 0

由特殊代码处理。你必须确保在数组的末尾有一个额外的条目,通常是_1,以停止循环,并且链在那里结束。参见

http://code.jsoftware.com/wiki/Vocabulary/Idioms#Variable-Length_Records