2011-09-15 16 views
14

no sé cómo lograr esto en general, pero voy a preguntar sobre un caso en particular, para mayor claridad:OCaml de nivel superior con extensiones de sintaxis

Sexplib parece interesante para mí. Quiero jugar con eso. Lo descargué, lo instalé muy bien (estoy bastante seguro, de todos modos), etc. Quiero usar la extensión de sintaxis "con sexp" en un topevel. ¿Cómo voy a hacer esto? Todos los ejemplos que he encontrado de su uso asumen que ya sabes cómo hacer el nivel superior y/o compilar con las extensiones de sintaxis.

Mi mejor oportunidad de que era algo como esto:

ocamlmktop -I +site-lib/sexplib -pp "camlp4 -I +site-lib/sexplib pa_sexp_conv.cma" -o sexplib-top 

Cuando ejecuto este nivel superior, que puede open Sexplib muy bien, pero cuando trato de usar la extensión with sexp sintaxis, me sale un error de sintaxis.

Respuesta

15

Es siglo XXI ya - utilizar ocamlfind:

 Objective Caml version 3.11.2 

# #use "topfind";; 
- : unit =() 

# #camlp4o;; 
/usr/lib/ocaml/dynlink.cma: loaded 
/usr/lib/ocaml/camlp4: added to search path 
/usr/lib/ocaml/camlp4/camlp4o.cma: loaded 
    Camlp4 Parsing version 3.11.2 

# #require "sexplib.syntax";; 
/usr/lib/ocaml/unix.cma: loaded 
/usr/lib/ocaml/bigarray.cma: loaded 
/usr/lib/ocaml/nums.cma: loaded 
/usr/lib/ocaml/num-top: added to search path 
/usr/lib/ocaml/num-top/num_top.cma: loaded 
/usr/lib/ocaml/sexplib: added to search path 
/usr/lib/ocaml/sexplib/sexplib.cma: loaded 
/usr/lib/ocaml/type-conv: added to search path 
/usr/lib/ocaml/type-conv/pa_type_conv.cmo: loaded 
/usr/lib/ocaml/sexplib/pa_sexp_conv.cmo: loaded 

# type t = { x : int; y : float; } with sexp;; 
type t = { x : int; y : float; } 
val t_of_sexp__ : Sexplib.Sexp.t -> t = <fun> 
val t_of_sexp : Sexplib.Sexp.t -> t = <fun> 
val sexp_of_t : t -> Sexplib.Sexp.t = <fun> 
+4

Bueno, yo pintar de naranja y me llama Susan. Gracias. Sería realmente útil si algún recurso de aprendizaje en línea o impreso, en cualquier lugar, en algún momento, alguna vez lo mencionara, alguna vez. – koschei

+0

Guau, disfruté de esta expresión idiomática :) Aquí hay un artículo sobre findlib (en ruso) - https://github.com/camlunity/kamlo_wiki/blob/master/Findlib.md - ampliado con este ejemplo – ygrek

+0

¿Qué hace el # camlp4o ;; arriba hacer? Cuando ingreso esa parte de arriba, no veo ninguna lista de módulos cargados, pero tampoco hay ningún error. No parece funcionar – aneccodeal

Cuestiones relacionadas