Какие полезные или интересные бесконечные генераторы?

Какое умное использование для бесконечных генераторов? Я видел много, казалось бы, тривиальных примеров, таких как "список всех четных чисел", но я полагаю, что должны быть другие, которые имеют больше применимости к реальным сценариям. Конкретные примеры (на любом языке, которые поддерживают генераторы) оценили!

Я дам тривиальный образец в качестве ответа.

Ответ 1

Посмотрите на код Haskell на http://rosettacode.org/wiki/Hamming_numbers#Haskell; который использует ленивые списки (которые несколько похожи на генераторы) творчески, чтобы перечислить все номера Хэмминга.

Ответ 2

A случайный генератор может считаться умным использованием.

Ответ 3

Тривиальный пример: вывод чисел Фибоначчи по одному (без проверки переполнения в С#):

public static IEnumerable<double> Fibonacci()
{
    double n_minus2 = 1;
    double n_minus1 = 1;
    yield return n_minus2;
    yield return n_minus1;

    while(true)
    {
        double n = n_minus2 + n_minus1;
        yield return n;
        n_minus2 = n_minus1;
        n_minus1 = n;
    }
}