Я играл с умными способами создания генератора Python для последовательности A003602
Похоже, это работает, но я не могу понять, почему. Мне кажется, что он должен ударить по бесконечной рекурсии. Делает ли python какую-то ленивую оценку где-то, что я не узнаю?
def N():
i=1
while True:
yield i
i+=1
def interleave(a,b):
def result():
x=a()
y=b()
while True:
yield next(x)
yield next(y)
return result
def RZ():
return interleave(N,RZ)()
gen=RZ()
Мне кажется, что, поскольку RZ мгновенно вызывает метод, возвращаемый чередованием, который, в свою очередь, вызывает b, который является RZ (до первого вызова к выходу), это должна быть бесконечная рекурсия. Но на самом деле это, кажется, работает. Может ли кто-нибудь объяснить, почему?