私は現在、expという自己生成型を受け入れ、算術演算(+ - * /)とシグマを行う関数を作っています。現在の作業状況は以下の通りです。進める方法はわかりません。例えばocamlで計算機を構築しました。シグマ関数の作り方はありません
type exp = X
| INT of int
| ADD of exp * exp
| SUB of exp * exp
| MUL of exp * exp
| DIV of exp * exp
| SIGMA of exp * exp * exp
let rec calculator : exp -> int
= fun e -> match e with
| INT x -> x
| ADD (e1, e2) -> calculator e1 + calculator e2
| SUB (e1, e2) -> calculator e1 - calculator e2
| MUL (e1, e2) -> calculator e1 * calculator e2
| DIV (e1, e2) -> calculator e1/calculator e2
| SIGMA (e1, e2, e3) -> let start = calculator e1 in
let end = calculator e2 in
match start with
| x ->
| _ -> expr2
、SIGMA(INT 1、INT 10、SUB(MUL(X、X)、INT 1))375
実は私は 'と呼ばれる本を参照していた結果を生成する必要があります当初」と参照コードからOCamlのは、(下記)に動作していないので、私は今続行することはできません...ここで
type expr =
Num of int
|Add of expr * expr
|Subtract of expr * expr
|Multiply of expr * expr
|Divide of expr * expr
let rec evaluate e =
match e with
| Num x -> x
| Add (e, e') -> evaluate e + evaluate e'
| Subtract (e, e') -> evaluate e - evaluate e'
| Multiply (e, e') -> evaluate e * evaluate e'
| Divide (e, e') -> evaluate e/evaluate e'
シグマとして合計?私はあなたが使っている言語について何も知らないが、ループを使ってすべての数字を要約できると思う。 –
環境変数と変数バインディングを保持する必要があります。私は同様の質問に答えていると確信しています。だからあなたの 'calculator'や' evaluate'は環境を持っている追加の引数を必要とします。あなたの 'expr'型は変数の' Var of string'を追加する必要があります。 ' –
' | x - > '句には式がありません。あなたは変数として' end'を使いますが、それはキーワードです。最後に、被除数を計算した結果がゼロの場合に何が起こるかを考えてみるとよいでしょう。 – gsg