HOL Light有一些折磨的camlp5逻辑来改变ocaml的语法。我已修补它在ocaml 4.04和6.17下工作,但它只能在camlp5 strict mode下工作。我已将问题追溯到the following code:
value vala_map f =
IFNDEF STRICT THEN
fun x -> f x
ELSE
fun
[ Ploc.VaAnt s -> Ploc.VaAnt s
| Ploc.VaVal x -> Ploc.VaVal (f x) ]
END
;
据我所知,如果定义了STRICT
,则应执行第二个宏分支,并且未定义第一个STRICT
。我已经使用camlp5r pa_macro.cmo -defined
检查了我的机器上使用camlp5严格模式定义STRICT
,并且在我的机器上使用camlp5过渡模式未定义。
不幸的是,第二个分支在两台计算机上都被占用,就好像两者都定义了STRICT
一样。将IFNDEF STRICT THEN
更改为IFNDEF BLAH THEN
会切换到第一个分支,同样再次定义STRICT
。但是,在代码之前放置UNDEF STRICT;
无效。
我很茫然,并且会喜欢任何有关可能发生的事情的建议,或者接受下一步的实验。
答案 0 :(得分:0)
神秘解决:该文件导入的其中一个模块明确启用了严格模式。 UNDEF
没有效果,因为STRICT
显然是一个特别处理的内置。