簡體   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