2016-10-03 115 views
2

一个无限的名单我知道有发电机产量在python,如:蟒蛇产生一定的条件

def f(n): 
    x = n 
    while True: 
     yield x 
     x = x+1 

所以我尝试这个功能的Haskell转换成蟒蛇不使用迭代:Haskell infinite recursion in list comprehension

我不知道如何在python中定义基本情况,也不知道如何结合if语句和这个yield yield!这里是我试图做的:

def orbit(x,y): 
    while True: 
     yield p (u,v) 
     p (u,v) = (u^2 - v^2 + x, 2 * u * v + y) 

回答

3

我没有看到你从哪里得到p从。至于我可以看到你几乎可以从字面上从哈斯克尔翻译:

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将被绑定到1v2在第一轮,那么( (1, 2))被放弃。在下一次迭代中,u = 1**2 - 2**2 + 1 = 1 - 4 + 1 = -2v = 2*1*2 + 2 = 6

+0

这是如此相似!几乎完全一样,我想我认为这是一个困难的方式。顺便说一句,非常感谢! – o1xhack