迭代器协议的K模式

时间:2018-08-19 11:02:14

标签: apl k

在欧拉计划问题中,我正在玩John Earnest's K implementation

许多问题涉及从无穷级数(尤其是素数)中获取前n个项或所有<= n个项。还可能需要一次从一个既有清单中取出物品,直到满足条件为止。

在Python中,一种方法是依赖迭代器协议:您可以从迭代器中获取数据,直到完成为止,或者在满足某些条件(例如您已提取n项,或最后一项已采用的条件)时提早退出满足一定条件。

K(或其他APL)中用于实现相似内容的典型模式是什么-即从列表或生成器获取满足条件的条件,而无需评估或处理整个列表?我是否必须依靠下面的技术,也许在f中使用某种内部状态?是否会阻止这种方法?如果是,为什么?

  f/x      / fixed point
n f/x      / apply f n times
p f/x      / do or while loop, with p a predicate function (stops when 0)

编辑2018-10-14:关于APL here中的惰性迭代的一些有趣注释。

1 个答案:

答案 0 :(得分:0)

您提到过(并在评论中建议):

p f/x      / do or while loop, with p a predicate function (stops when 0)

实际上,您可以提供在每个步骤中应用于结果的谓词函数。只要谓词结果为1b,迭代就会继续,否则停止。例如,这就是一旦斐波那契数列超过100就停止计算的方法:

{*|x<100} {x,+/-2#x}/1 1