новости сообщество форум вики полезно

Ленивые списки

11/11/2011 10:09

Хотел бы поделиться библиотечкой по ленивым спискам: https://github.com/vjache/erlang-zlists

В качестве примеров, где они могли бы использоваться:

  • Допустим вы разрабатываете API доступа к неким данным. Данные обычно возвращаются как списки неких объектов(записей). Если возвращаемые списки должны быть большими то это превращается в проблему. Зачастую появляются две разновидности функций, т.н. легковесные(для получения маленьких результатов) и балковые (для получения больших результатов). При этом клиентский код должен поддерживать два типа источника данных, списки для малых результатов и нечто для больших результатов. Во втором случае, обычно используется паттерн continuation(см. например disk_log).

    Так вот чтобы не изгаляться, можно сделать одну API функцию возвращающую zlist. Для коротких результатов всё будет скорей всего возвращено в N головных элементах(это можно регулировать параметром запроса), но если не вписался, то остальное будет дозапрошено в хвостовой функции.
  • zlist можно использовать ИМХО для написания парсеров больших данных. Дело в том что, я мог бы реализовать ленивую коллекцию не как improper list, а как что то не прозрачное (тупль, рекорд) с функцией next(), но я решил сохранить одно из свойств списка - это возможность паттерн мэтчинга N головных элементов.

 


 
 
 
 

так же

Ссылки

Авторы

См. также

twitter