Какие библиотеки 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 для него.

Другие вопросы по тегам