Какие библиотеки OCaml существуют для ленивой обработки списка?
Какие библиотеки OCaml предоставляют ленивую обработку списка? Я ищу что-то вроде этого:
type 'a lazy_list = (*'*)
| Nil
| Cons of 'a * 'a lazy_list lazy_t
let from f =
let rec gen n =
lazy
(
match f n with
| Some x ->
Cons (x, gen (n + 1))
| None ->
Nil
)
in
gen 0
Интеграция с Stream
Тип и синтаксический сахар для возврата парсеров Camlp4 было бы неплохо.
2 ответа
Решение
Ocaml Batteries имеет ленивый модуль списка, проверьте to_stream
функция. Что касается возврата, вы можете посмотреть потоковые парсеры camlp4 теперь, когда у вас есть Stream.t .
Кроме того, есть модуль отложенного списка, называемый Cf_seq
в моей основной среде среды сетевых приложений OCaml. На самом деле я написал целый ряд функциональных структур данных. Это все доступно под лицензией BSD с 2 пунктами. Наслаждаться.
Обновление: код был переименован в " Oni", и теперь он размещен в BitBucket. Вы также можете использовать пакет GODI для него.