F # Дискриминационные союзы и печать - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь решить проблему ниже, но не могу понять, как напечатать ее в нужном формате с круглыми скобками и числами / операторами.

enter image description here

enter image description here

У меня есть код ниже для создания выражений, но печать% A с использованием шаблона совпадения не работает.Я могу получить доступ к значениям, но не могу распечатать их в нужном формате.У кого-нибудь есть предложения?

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

1 Ответ

0 голосов
/ 10 июня 2018

Решением этой проблемы является реализация toString путем сопоставления с шаблоном на expr и вывода соответствующей строки для 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...