繁体   English   中英

F#鉴别工会和印刷

[英]F# Discriminated Unions and Printing

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

在此输入图像描述

在此输入图像描述

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

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

解决此问题的方法是通过expr上的模式匹配实现toString ,并为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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM