OCaml 布尔表达式的求值

示例

我们定义布尔表达式的类型,其原子由字符串标识为

type expr =
| Atom of string
| Not of expr
| And of expr * expr
| Or of expr * expr

并可以通过oracle : string -> bool给出原子的值来评估这些表达式,如下所示:

let rec eval oracle = function
| Atom(name) -> oracle name
| Not(expr) -> not(eval oracle expr)
| And(expr1, expr2) -> (eval oracle expr1) && (eval oracle expr2)
| Or(expr1, expr2)  -> (eval oracle expr1) || (eval oracle expr2)

了解该功能如何清晰易读。由于正确使用了模式匹配,因此读取此功能的程序员只需很少的时间即可确保其正确实现。