在欧拉计划问题中,我正在玩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中的惰性迭代的一些有趣注释。
答案 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