2011-09-15 26 views
14

Tôi không biết làm thế nào để thực hiện điều này nói chung, nhưng tôi sẽ hỏi về một trường hợp đặc biệt cho rõ ràng:OCaml mục cấp đầu với phần mở rộng cú pháp

Sexplib trông thú vị với tôi. Tôi muốn chơi đùa với nó. Tôi đã tải về nó, cài đặt nó tốt (tôi khá chắc chắn, anyway), vv Tôi muốn sử dụng phần mở rộng cú pháp "với sexp" trong một toplevel. Tôi sẽ đi đâu để tới đó? Tất cả các ví dụ tôi đã tìm thấy về việc sử dụng nó giả sử bạn đã biết làm thế nào để làm cho việc mở rộng và/hoặc biên dịch với các phần mở rộng cú pháp.

bắn tốt nhất của tôi tại đó là một cái gì đó như thế này:

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

Khi tôi chạy mục cấp đầu này, tôi có thể open Sexplib tốt, nhưng khi tôi thử sử dụng phần mở rộng with sexp cú pháp, tôi nhận được một lỗi cú pháp.

Trả lời

15

Đó là thế kỷ XXI rồi - sử dụng 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

Vâng, sơn tôi cam và gọi tôi là Susan. Cảm ơn bạn. Nó sẽ thực sự hữu ích nếu bất kỳ tài nguyên học tập trực tuyến hoặc in ấn, bất cứ nơi nào, ở tất cả, bao giờ đề cập đến điều này, bao giờ hết. – koschei

+0

Wow, thích biểu thức thành ngữ này :) Đây là một bài viết về findlib (bằng tiếng Nga) - https://github.com/camlunity/kamlo_wiki/blob/master/Findlib.md - được mở rộng với ví dụ này – ygrek

+0

# camlp4o ;; ở trên làm gì? Khi tôi nhập phần đó ở trên, tôi không thấy bất kỳ danh sách mô-đun nào được tải - nhưng cũng không có lỗi. Dường như không hoạt động. – aneccodeal

Các vấn đề liên quan