Ocaml打印一个接一个的声明

时间:2017-07-26 09:57:34

标签: ocaml

我对Ocaml和ML一般都是新手,我一直有一个非常根本的问题。我正在使用模式匹配,并且在一个匹配中我想打印两个或更多连接语句。例如。 nrow()

chan^"("^var^")"^op2^(poc p); chan^"("^var^")"^op^(poc p)

但是每次我运行时,打印的唯一声明是半冒号之后的最后一个。我可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您的函数不会打印语句但会构建字符串,因此它会返回一个值,并且不会执行任何副作用。当分号运算符散布在两个表达式之间时,它不会合并这些表达式产生的值,因此如果您有"hello"; "world",则结果为"world"。这就是你的情况下发生的事情

chan^"("^var^")"^op^(poc2 p); chan^"("^var^")"^op2^(poc2 p)

电梯上的所有东西都被扔掉了。

快速解决方法是连接它们,例如,

chan^"("^var^")"^op^(poc2 p) ^ ";\n" ^ chan^"("^var^")"^op2^(poc2 p)

但一般来说,打印AST的惯用方法是使用Format模块,并实现一个类型为pp的递归Format.formatter -> 'a -> unit函数。注意返回类型,该函数不构建字符串(通常是二次复杂度的操作),而是将其打印到通用输出流中。