Вот несколько советов для начала работы
let rec evaluate AST =
match AST with
|Prod(a,b) -> evaluate(a) * evaluate(b)
|Num(a) -> a
....
РЕДАКТИРОВАТЬ
Поэтому я предполагаю, что ваш тип данных выглядит как
type AST =
|Num of int
|Neg of AST
|Prod of AST * AST
|Diff of AST * AST
|Quot of AST * AST
|Sum of AST * AST
, поэтомувы устанавливаете свой AST (предположительно, вы анализируете это откуда-то - это совсем другой вопрос) с чем-то вроде
let ast = Prod(Num 5, Diff(Num 6, Num 1))
, тогда вы можете определить оценку как
let rec evaluate arg =
match arg with
|Num n -> n
|Neg tree -> - (evaluate tree)
|Sum (a,b) -> (evaluate a) + (evaluate b)
|Prod(a,b) -> (evaluate a) * (evaluate b)
|Quot(a,b) -> (evaluate a) * (evaluate b)
|Diff(a,b) -> (evaluate a) - (evaluate b)
, затем вызватьи напечатайте результат с помощью
printfn "%i" (evaluate ast)
Обратите внимание, что evaluate
должен иметь тип AST -> int
, так как в противном случае вам придется обрабатывать варианты опций - например, что 2 * None
или 2 + None
Я не уверен, что вы имеете в виду под
как мне поступить при вызове рекурсивного метода для небольших входных данных.
но, надеюсь, это все объясняет