首页 > 解决方案 > F# 可区分联合和打印

问题描述

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

在此处输入图像描述

在此处输入图像描述

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

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

标签: f#

解决方案


这个问题的解决方案是toString通过模式匹配来实现,并为andexpr输出适当的字符串: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)

推荐阅读