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

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

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

3 ответа

Решение

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

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

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

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;
    }
}
Другие вопросы по тегам