Gab*_*iel 5 compiler-construction f# functional-programming
我有以下情况:
let private runStatement (vars : Map<identifier, value>) stmt =
match stmt with
| Assignment (id, expr) -> runAssignment vars id expr
| Print exprs -> runPrint vars exprs
| Read id -> runRead vars id
| If (cond, stmts) -> runIf vars cond stmts
let rec private runStatements vars stmts =
match stmts with
| stmt::rest ->
let newVars = runStatement vars stmt
runStatements newVars rest
| [] -> vars
let private runIf vars conditionalValue statements =
match conditionalValue with
| Boolean v when v -> runStatements vars statements
| Boolean v -> vars
| _ -> failwith "Not a boolean expression in if statement"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,函数runStatement
调用 runIf
和runIf
调用runStatement
,因为if语句是由一些通用语句组成的,而一般语句可以是if语句.
我该如何解决这种情况?
PS:我有一个像其他功能类似的情况runWhile
,runIfElse
等等.
使用'和'关键字
let rec runx () =
printf "runx"
runy ()
and runy () =
printf "runy"
runx ()
runx () |> ignore
Run Code Online (Sandbox Code Playgroud)
版画
runxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxrunyrunxruny
Run Code Online (Sandbox Code Playgroud)