Re: Ликбез по ComputationExpressions
От: dsorokin Россия  
Дата: 23.04.10 07:08
Оценка: 111 (3)
Здравствуйте, hardcase, Вы писали:

H>какие задачи решает эта система макросов, для чего она нужна?


Последние новости. Сейчас работаю над хвостовой оптимизацией для enumerable comprehension (пока на залили в svn). Возможны финты типа:

    def stream (n)
    {
      comp enumerable
      {
        yield n;
        yieldcomp (stream (n + 1));
      }
    }


Кстати, работает быстрее, чем аналогичная вещь на F# Вообще, еnumerable comprehension создает ленивую последовательность, которая вычисляется только по требованию. Иногда незаменимая вещь.

Вот, более полезный пример. Лениво возвращает список всех файлов, включая вложенные, из заданного каталога.

    
    def filesUnderFolder (rootFolder : string) : IEnumerable [string]
    {
      comp enumerable
      {
        foreach (file in System.IO.Directory.GetFiles (rootFolder))
          yield file;
        foreach (dir in System.IO.Directory.GetDirectories (rootFolder))
          yieldcomp (filesUnderFolder (dir))
      }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.