Re[4]: 1. Простые питоноподобные генераторы
От: Mr.Cat  
Дата: 23.06.09 05:11
Оценка: 12 (1)
Здравствуйте, 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, однако в нашем варианте невозможны хвостовые вызовы между генераторами, так что за пределы генератора лучше лишний раз не выходить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.