我正在尝试寻找一种算法来编写高级函数 - 不必停止 - 在 Python(或伪代码)中,对于给定的函数列表 [f1,...,fn]并且给定的输入列表 [x1,...,xn] 仅打印一次 fi(xj)(表示所有函数和输入对)。
当然,实现这个的天真的建议是:
for f in lst1:
for x in lst2:
f(x)
但要注意的是,某些函数可能会在某些输入上永远循环。
我可以使用步进器(它有一个 step() 方法,每次调用时都会对函数进行一个后续计算步骤)
我只需要一个关于如何做到这一点的想法或算法。
请您参考如下方法:
这个的一般概念是吻合。您不必尝试运行每个备选方案来完成,而是将各种备选方案交织在一起。例如,给定三个计算 c1、c2、c3:
- 运行 c1 的第 1 步
- 运行c2的第1步
- 运行c3的第1步
- 运行c1的第2步
- 运行c2的第2步,它终止
- 运行c3的第2步
- 运行c1的第3步
- 运行c3的第3步
- ...
如果计算停止,此过程将在有限时间内达到其停止状态,而不管有多少其他计算没有停止。以这种方式运行 k 次计算只会使每次计算减慢 k 倍。由于这可能是家庭作业,我不会详细说明如何将其应用于您的具体问题。
当然,如果任何计算没有停止,这也不会停止。这是不可避免的(参见暂停问题)而不是问题,因为在进入无用的无限循环之前,您将完成那些做暂停的问题(在您的情况下:输出它们的结果)。
