数学計算プログラムの一部を書きました。プログラムのパーサーを完成させたので、ユーザーが数式を文字列として入力すると、次の型の対応するデータ構造を取得する方法が既にあります。
type expression =
| Term of int
| Addition of expression * expression
| Multiplication of expression * expression
| Subtraction of expression * expression
今必要なのは、この種のデータ構造を評価する方法だけです。
- (a) 数学ステートメント「3*((1 + 4)- 5)」に対応する式を書きます</li>
- (b) Ocaml データ型を拡張して階乗コンストラクタを含め、「3*((1 + 4)! -5)」などの式を処理できるようにする</li>
- (c) 数式を取り、その (整数) 値を返す Ocaml 関数 eval を書きます。たとえば、(a) の式の結果として 0 を返す必要があります。
# let rec eval expr = ... val eval : expression -> int = <fun>
新しい階乗コンストラクターを支援する階乗 Ocaml 関数を書きたいと思うかもしれません。
私はパートAについて混乱しています。ということlet expression = 3*((1 + 4)- 5);
ですか?
パート b については、パターンに従う必要があります|Factorial of expression * expression
か?