type bool_exp =
TT
| FF
| Var of string
| And of bool_exp * bool_exp
| Not of bool_exp ;;
eval : bool_exp -> (string -> bool) -> bool
という評価関数を書こうとしていますeval
。私はOCamlに非常に慣れておらず、構文に慣れていません。これをどこから書き始めることができますか?
あなたのようなデータ型を扱うときの主なデバイスbool_exp
はパターンマッチングです。つまり、関数への入力の考えられるすべてのケースに対して、その動作を個別に指定します。関数のスケルトンは次のeval
ようになります
let rec eval e env =
match e with
TT -> ...
| FF -> ...
| Var x -> ...
| And (e1, e2) -> ...
| Not e
;;
最初の引数e
は評価される式で、2 番目の引数はenv
しばしばenvironmentと呼ばれ、変数 (文字列で表される) を値 (ここでは単なるブール定数) にマッピングします。
定義されたrec
関数が再帰的である (つまり、関数本体でそれ自体を使用する) 場合は常に必要であり、データ型が再帰的に定義されているため、再帰的にeval
なります。たとえば、評価するには、まず同じ環境の値とwrtAnd (e1, e2)
を知る必要があります。e1
e2
これで始められるはずです。