我正在遵循“ 实用逻辑和自动推理手册 ”的代码库的Haskell版本。以下情况的目的是什么$form?
eval :: Formula -> (Rel -> Bool) -> Bool
eval fm v = case fm of
[$form| ? |] -> True
[$form| ? |] -> False
[$form| ^a |] -> v a
[$form| ¬ $p |] -> not (eval p v)
[$form| $p ? $q |] -> eval p v && eval q v
[$form| $p ? $q |] -> eval p v || eval q v
[$form| $p ? $q |] -> not (eval p v) || (eval q v)
[$form| $p ? $q |] -> eval p v == eval q v
_ -> error "quantifier in prop eval"
Run Code Online (Sandbox Code Playgroud)
相关的OCaml代码很简单:
let rec eval fm v =
match fm with
False -> false
| True -> true
| Atom(x) -> v(x)
| Not(p) -> not(eval p v)
| And(p,q) -> (eval p v) & (eval q v)
| Or(p,q) -> (eval p v) or (eval q v)
| Imp(p,q) -> not(eval p v) or (eval q v)
| Iff(p,q) -> (eval p v) = (eval q v);;
Run Code Online (Sandbox Code Playgroud)