Здравствуйте, FR, Вы писали:
FR>FR>def fib(n):
FR> a, b = 1, 1
FR> for i in range(n):
FR> yield a
FR> a, b = b, a + b
FR>for i in fib(10):
FR> print i
FR>
А наш вариант на scheme позволит писать вот так (пожалуй, стоило включить подобный пример в текст):
(define-generator (fib)
(let fib/iter ((curr 1)
(next 1))
(yield curr)
(fib/iter next (+ curr next))))
Результатом этого выражения будет бесконечный стрим чисел фибоначчи.
Можно было бы еще рекурсивно извратиться с помощью yield-splice, однако в нашем варианте невозможны хвостовые вызовы между генераторами, так что за пределы генератора лучше лишний раз не выходить.