Какие полезные или интересные бесконечные генераторы?
Какое умное использование для бесконечных генераторов? Я видел много, казалось бы, тривиальных примеров, таких как "перечисление всех четных чисел", но я предполагаю, что должны быть другие, которые более применимы к сценариям реального мира. Конкретные примеры (на любом языке, поддерживающем генераторы) приветствуются!
Я дам тривиальный образец в качестве ответа.
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;
}
}