2009-09-10 7 views
3

Quelles sont les bibliothèques OCaml qui fournissent une gestion de liste paresseuse? Je cherche quelque chose le long de ces lignes:Quelles bibliothèques OCaml sont là pour la gestion des listes paresseuses?

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 

Intégration avec le type Stream et le sucre syntaxique pour retours en arrière Camlp4 parseurs serait bien.

+0

'Lazy.t' devrait être utilisé à la place de' lazy_t' – user102008

Répondre

6

Ocaml Batteries a un lazy list module, consultez la fonction to_stream. Pour revenir en arrière, vous pouvez regarder dans les analyseurs de flux de camlp4 maintenant que vous avez un Stream.t.

+0

Merci, module de liste paresseux est très pratique. Je ne suis pas sûr des analyseurs de flux, car ils ne font pas marche arrière. Mais je vais comprendre à partir d'ici. – t0yv0

+0

bien, camlp4 ne fait pas marche arrière? Peut-être que je pensais à camlp5? L'un d'eux (ou les deux) fait des backtracks via des suites ... – nlucaroni

+0

Ah oui, ça semble être camlp5. Merci! http://pauillac.inria.fr/~ddr/camlp5/doc/htmlc/bparsers.html – t0yv0

2

En outre, il existe un module de liste paresseux appelé Cf_seq dans ma base de données OCaml Network Application Environment. En fait, j'ai écrit tout un tas de structures de données fonctionnelles. Tout est disponible sous licence BSD à 2 clauses. Prendre plaisir.

Mise à jour: le code a été renommé "Oni" et il est maintenant hébergé chez BitBucket. Vous pouvez également utiliser le package GODI pour cela.

Questions connexes