HOL Light 有一些复杂的 camlp5 逻辑来改变 ocaml 的语法。我已经对其进行了修补,使其可以在 ocaml 4.04 和 6.17 下工作,但它只能在 camlp5 strict mode 下工作。我已将问题追溯到以下代码:
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
,而第一个 ifSTRICT
未定义。我已经检查了camlp5r pa_macro.cmo -defined
它STRICT
是在我的机器上使用camlp5 严格模式定义的,而在我的机器上使用camlp5 过渡模式定义的。
不幸的是,第二个分支在两台机器上都进行了,就好像在两台机器STRICT
上都定义了一样。更改IFNDEF STRICT THEN
为IFNDEF BLAH THEN
切换到第一个分支,就像在两个分支STRICT
上都定义了一样。UNDEF STRICT;
但是,在代码之前放置一个没有效果。
我很茫然,并且会喜欢任何关于可能发生的事情的建议,或者接下来要运行的实验。