OCaml/ML中的评估员

Spr*_*ips 1 ocaml ml evaluator

type bool_exp =
    TT
  | FF
  | Var of string
  | And of bool_exp * bool_exp
  | Not of bool_exp ;;

 eval : bool_exp -> (string -> bool) -> bool
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个名为的求值函数eval.我是OCaml的新手并不习惯语法.我在哪里可以写这篇文章?

chr*_*ris 5

使用类似数据类型的主要设备bool_exp模式匹配.也就是说,对于函数输入的每种可能情况,您可以单独指定其行为.你的eval功能的骨架可能看起来像

let rec eval e env =
  match e with
    TT -> ...
  | FF -> ...
  | Var x -> ...
  | And (e1, e2) -> ...
  | Not e
;;
Run Code Online (Sandbox Code Playgroud)

第一个参数e是应该计算的表达式,第二个参数env通常称为环境,将变量(由字符串表示)映射到值(这里只是布尔常量).

rec需要的时候定义的函数是递归的(即,在函数体中使用本身),而且由于你的数据类型是递归定义,也eval将是递归的.例如,为了评估And (e1, e2)您首先必须知道相同环境的值e1e2相同的环境.

这应该让你开始.