f# - F# 可区分联合和打印
问题描述
我正在尝试解决以下问题,但很难弄清楚如何使用括号和数字/运算符以所需的格式打印它。
我有下面的代码来创建表达式,但是使用匹配模式打印 %A 不起作用。我可以访问值,但无法以所需的格式打印它们。有人有建议吗?
let one = Const(1)
let two = Const(2)
let three = Const(3)
let Bin1 = BinOpr(one, "+", two)
let Bin2 = BinOpr(Bin1, "*", three)
解决方案
这个问题的解决方案是toString
通过模式匹配来实现,并为andexpr
输出适当的字符串: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)
推荐阅读
- javascript - R reactable _如何截断单元格内容并在悬停时显示?
- nlp - 使用 Dialogflow 检测任意数量的意图
- javascript - CORS 策略已阻止从源“http://localhost:3000”访问“https://www.cloudflare.com/cdn-cgi/trace”获取
- ios - 如何以编程方式使用 myapp 文件夹打开默认文件应用程序?
- javascript - React 和 Express 在不同的 localhost 端口上运行,但 CORS 没有阻止 fetch 调用
- c++ - 从 C++ 派生类的 this 获取共享指针
- php - AJAX PHP 服务器端响应,但我无法在客户端页面中显示响应
- erlang - Erlang中带注释的元组类型的用例是什么?
- c# - 为什么在此 LINQ 查询中销毁后使用 db 上下文?
- mongodb - 将服务器上运行的 Mongodb Docker 容器连接到我计算机上的 Robo 3t