我知道Python中有生成器产量,例如:
def f(n):
x = n
while True:
yield x
x = x+1
所以我尝试将这个 haskell 函数转换为 python 而不使用 iterate: Haskell infinite recursion in list comprehension
我不知道如何在Python中定义基本情况,也不知道如何将if语句与这个yield工作人员结合起来!这是我尝试做的事情:
def orbit(x,y):
while True:
yield p (u,v)
p (u,v) = (u^2 - v^2 + x, 2 * u * v + y)
最佳答案
我不明白你从哪里得到p
。据我所知,你几乎可以从 Haskell 逐字翻译它:
def orbit(x, y):
u, v = 0, 0
while True:
u, v = u**2 − v**2 + x, 2*u*v + y
yield u, v
在他们的示例中,将函数调用为 orbit(1, 2)
,u
将绑定(bind)到 1
和 v在第一轮中将
变为 2
,则生成 ((1, 2)
)。在下一次迭代中,u = 1**2 - 2**2 + 1 = 1 - 4 + 1 = -2
和 v = 2*1*2 + 2 = 6
.
关于python 生成具有特定条件的无限列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840845/