1
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に非常に慣れておらず、構文に慣れていません。これをどこから書き始めることができますか?

4

2 に答える 2

5

あなたのようなデータ型を扱うときの主なデバイス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)を知る必要があります。e1e2

これで始められるはずです。

于 2014-01-19T18:53:53.413 に答える