我是OCaml的新手,我试图按照this tutorial的4.3来定义自定义报价行为。从我所读过的内容来看,加载camlp4o.cma
似乎是使报价模块对OCaml可见的原因。所以我在OCaml解释器中尝试了以下内容:
# #load "dynlink.cma";;
# #load "camlp4o.cma";;
Camlp4 Parsing version 4.02.3
看起来camlp4o.cma
已成功加载。所以我继续学习本教程的其余部分:
# let expand _ s =
match s with
"PI" -> "3.14159"
| "goban" -> "19*19"
| "chess" -> "8*8"
| "ZERO" -> "0"
| "ONE" -> "1"
| _ -> "\"" ^ s ^ "\""
;;
val expand : 'a -> string -> string = <fun>
# Quotation.add "foo" (Quotation.ExStr expand);;
Characters 0-13:
Quotation.add "foo" (Quotation.ExStr expand);;
^^^^^^^^^^^^^
Error: Unbound module Quotation
我不确定为什么我会收到此错误。我跳过了什么吗?我在Windows上使用OCaml版本4.02.3,如果这是相关的。
答案 0 :(得分:1)
http://caml.inria.fr/pub/docs/tutorial-camlp4/index.html下的教程是OLD。它基于版本3.10.0之前的CamlP4。 CamlP4在OCaml 3.10.0完全重写。这个“新”CamlP4有很多不兼容性。
如今人们已经从CamlP4转移到PPX,所以我不确定CamlP4是否值得学习。话虽如此,你可以看到https://github.com/ocaml/camlp4/wiki有关“新”CamlP4的一些文件。杰克·唐纳姆的博客http://ambassadortothecomputers.blogspot.com/也提供了很好的信息。