Какие библиотеки OCaml существуют для ленивой обработки списка? - PullRequest
3 голосов
/ 10 сентября 2009

Какие библиотеки 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 ]

6 голосов
/ 10 сентября 2009

Аккумуляторы Ocaml имеет модуль Ленивый список , проверьте функцию to_stream. Что касается возврата, вы можете посмотреть потоковые парсеры camlp4 теперь, когда у вас есть Stream.t.

2 голосов
/ 28 октября 2009

Кроме того, в моей среде сетевого приложения OCaml Core Foundation есть модуль отложенного списка Cf_seq. На самом деле я написал целый ряд функциональных структур данных. Это все доступно под лицензией BSD с 2 пунктами. Наслаждайтесь.

Обновление : код был переименован в " Oni " и теперь он размещен в BitBucket Вы также можете использовать пакет GODI .

...