Ocaml打印一条又一条语句

Ocaml打印一条又一条语句,ocaml,Ocaml,一般来说,我对Ocaml和ML非常陌生,我一直有一个非常基本的问题。我使用的是模式匹配,在一个匹配中,我想打印两个或多个连接语句。如。 chan^”(“^var^”)“^op2^(poc p);chan^“(“^var^”)“^op^(poc p) 但每次我运行它时,唯一打印的语句是分号后的最后一个语句。我可以得到一些帮助吗?您的函数不打印语句,而是生成一个字符串,因此它返回一个值,并且不执行任何副作用。当分号运算符散布在两个表达式之间时,它不会组合从这些表达式生成的值,因此如果您有“hello

一般来说,我对Ocaml和ML非常陌生,我一直有一个非常基本的问题。我使用的是模式匹配,在一个匹配中,我想打印两个或多个连接语句。如。
chan^”(“^var^”)“^op2^(poc p);chan^“(“^var^”)“^op^(poc p)


但每次我运行它时,唯一打印的语句是分号后的最后一个语句。我可以得到一些帮助吗?

您的函数不打印语句,而是生成一个字符串,因此它返回一个值,并且不执行任何副作用。当分号运算符散布在两个表达式之间时,它不会组合从这些表达式生成的值,因此如果您有
“hello”;“世界”
结果是
“世界”
。当你这样做的时候,你的情况就是这样

chan^"("^var^")"^op^(poc2 p); chan^"("^var^")"^op2^(poc2 p)
电梯里的所有东西都被扔掉了

快速修复方法是将它们连接起来,例如

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

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

函数不打印语句,而是生成字符串,因此它返回一个值,并且不执行任何副作用。当分号运算符散布在两个表达式之间时,它不会组合从这些表达式生成的值,因此如果您有
“hello”;“世界”
结果是
“世界”
。当你这样做的时候,你的情况就是这样

chan^"("^var^")"^op^(poc2 p); chan^"("^var^")"^op2^(poc2 p)
电梯里的所有东西都被扔掉了

快速修复方法是将它们连接起来,例如

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

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

你能添加整个匹配表达式吗?从你的问题我可以猜到你返回了一个字符串而不是打印它。嗨,是的,我刚刚用代码编辑了这个问题。问题是连接的字符串是不同用户定义类型的组合,所以现在我只打印它,但每当我分配给变量时,它返回单位,我无法打印出来。您可以添加整个匹配表达式吗?从你的问题我可以猜到你返回了一个字符串而不是打印它。嗨,是的,我刚刚用代码编辑了这个问题。问题是连接的字符串是不同用户定义类型的组合,所以现在我只打印它,但每当我分配给变量时,它返回单位,我无法打印出来,非常感谢指针。我将尝试Format.Formatter选项。谢谢你好,我有一个后续问题。假设我想在问题中构建这个字符串,以便将其添加到集合中,那么最好的方法是什么?现在我正在打印它,但是如果我真的想把它赋给一个字符串变量呢?每次我这样做时,它都会返回Unit。您可以使用Format.asprintf函数打印成字符串。您好,非常感谢指针。我将尝试Format.Formatter选项。谢谢你好,我有一个后续问题。假设我想在问题中构建这个字符串,以便将其添加到集合中,那么最好的方法是什么?现在我正在打印它,但是如果我真的想把它赋给一个字符串变量呢?每次我这样做时,它都会返回Unit,您可以使用Format.asprintf函数打印成字符串。