私はOcamlの初心者です。通常の順序削減に関するコードを記述しようとしていますが、構文が混乱しています。以下は、エラーを特定するための切り捨てられたコードです。
type expr =
| Var of char
| Num of int
| Lambda of expr
| Apply of expr * expr
let rec substitute f id e = match f with
| Num(i) -> if id == i then e else f
| _ -> f
let rec beta_lor e = match e with
| Apply(Lambda(f), e2) -> substitute f 1 e2
| Apply(e1,e2) -> beta_lor e1
| Lambda e1 -> beta_lor e1
| _ -> None
.mliのファイルで、beta_lorのタイプは次のようになります。valbeta_lor:expr-> expr option
このファイルをコンパイルすると、beta_lorで使用した「None」の行に関するエラーが報告されます。エラー:この式にはタイプ'オプションがありますが、タイプexprの式が必要です。
ocamlコンパイラが型推論を行おうとしていることを理解し、オプションではなく式を出力することを期待していますが、beta_lorがオプションを出力する可能性があると主張しましたか?少し混乱しています。助けてください。