Pregunta

¿Qué bibliotecas de OCaml hay por ahí que proporcionan un manejo de listas lento? Estoy buscando algo en este sentido:

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

La integración con el tipo Stream y el azúcar sintáctica para backtracking los analizadores de Camlp4 serían agradables.

¿Fue útil?

Solución

Ocaml Batteries tiene una módulo de lista diferida , revise la función to_stream . En cuanto al retroceso, puedes mirar los analizadores de flujo de camlp4 ahora que tienes un Stream.t.

Otros consejos

También, hay un módulo de lista perezoso llamado Cf_seq en mi OCaml Network Application Environment Core Foundation. De hecho, escribí toda una serie de estructuras de datos funcionales. Todo está disponible bajo una licencia BSD de 2 cláusulas. Disfrutar.

Actualización : el nombre del código se ha cambiado " Oni " y ahora está alojado en BitBucket. También puede usar el paquete GODI para ello.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top