评估布尔表达式

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

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)

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