【发布时间】:2020-01-03 15:26:47
【问题描述】:
我正在尝试使用可区分联合来表达简单的数学表达式。例如 1 + 2 * 3,可以使用二元运算符从整数常量构造。表达式使用以下 F# 声明建模:
type expr =
| Const of i:int
| BinOpr of a: expr * b:string * c:expr
当使用构造函数 BinOpr 生成表达式时,构造 Const 生成一个整数常量,并且运算符以字符串形式给出(例如:“+”)。
以下是使用此模型的两种表达方式。
let b = BinOpr(Const(2), "+", Const(2))
let c = BinOpr(BinOpr(Const(2), "-", Const(3)), "+", Const(2))
我正在尝试创建一个将这些表达式转换为字符串的函数,例如使用 b 作为参数,结果应该是 “2 + 2” 或使用 c 将是 "2 - 3 + 2"
我无法弄清楚我将如何诚实地解决这个问题并寻找可以帮助我找到解决方案的指针。
【问题讨论】: