F#鉴别工会和印刷

时间:2018-06-09 20:56:44

标签: f#

我正在尝试解决下面的问题,但很难找出如何以所需的格式打印它,括号和数字/运算符。

enter image description here

enter image description here

我有以下代码来创建表达式,但使用匹配模式打印%A不起作用。我可以访问值但不能以所需的格式打印它们。有人有建议吗?

let one = Const(1)
let two = Const(2)
let three = Const(3)
let Bin1 = BinOpr(one, "+", two)
let Bin2 = BinOpr(Bin1, "*", three)

1 个答案:

答案 0 :(得分:1)

此问题的解决方案是通过toString上的模式匹配实现expr,并输出ConstBinOpr的相应字符串:

  • 对于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)