Двусторонние итераторы в Nemerle
От: catbert  
Дата: 20.05.10 18:07
Оценка:
Этот пост не фич-реквест, просто интересно обсуждение.

Насколько возможно чисто в макросах реализовать поддержку двусторонних итераторов/генераторов? Это что-то вроде:

Iterator() : Seq[int]
{
   mutable x = 42;
   
   while (true)
   {
       x = yield(x); // yield работает как функция, которая передает аргумент вовне, и возвращает то, что оттуда положат
   }
}

Main() : void
{
    def numbers = Iterator();    

    foreach (i in [1..10])
    {
         WriteLine(numbers[i]); // передаем в Iterator і, получаем оттуда x
    }
}


На выходе получается (вроде как) 42, 1, 2, 3, 4, 5, 6, 7, 8, 9. Фича иногда бывает даже полезна.

Ясно, что как минимум надо будет реализовать интерфейс, похожий на IEnumerable, в котором MoveNext принимает параметр. Ещё, соответственно, нужен макрос для yield. Есть какие-то проблемы, что мешають реализовать данное чудо? (кроме не слишком широкой востребованности)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.