camlp5 IFNDEF STRICT与我的期望相反

时间:2016-12-12 05:48:55

标签: camlp4

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;无效。

我很茫然,并且会喜欢任何有关可能发生的事情的建议,或者接受下一步的实验。

1 个答案:

答案 0 :(得分:0)

神秘解决:该文件导入的其中一个模块明确启用了严格模式。 UNDEF没有效果,因为STRICT显然是一个特别处理的内置。