我正在尝试解决下面的问题,但很难找出如何以所需的格式打印它,括号和数字/运算符。
我有以下代码来创建表达式,但使用匹配模式打印%A不起作用。我可以访问值但不能以所需的格式打印它们。有人有建议吗?
let one = Const(1)
let two = Const(2)
let three = Const(3)
let Bin1 = BinOpr(one, "+", two)
let Bin2 = BinOpr(Bin1, "*", three)
答案 0 :(得分:1)
此问题的解决方案是通过toString
上的模式匹配实现expr
,并输出Const
和BinOpr
的相应字符串:
Const
,您只需将int
转换为字符串。BinOpr
,您必须构建(<expr> <op> <expr>)
形式的字符串。尝试自己实现这个功能,并不难,但是如果遇到困难,我会在下面提供解决方案。
let rec toString expr =
match expr with
| Const x -> string x
| BinOpr (e1, op, e2) -> sprintf "(%s %s %s)" (toString e1) op (toString e2)