type exp = X | INT of int
| REAL of float
| ADD of exp * exp
| SUB of exp * exp
| MUL of exp * exp
| DIV of exp * exp
| SIGMA of exp * exp * exp
exception Error
let rec calculate t =
let rec eval expr env =
match (expr,env) with
| (X, []) -> raise Error
|(X,hd::tl) -> hd
|(INT i, _) -> float_of_int i
|(REAL r, _) -> r
|ADD (n1,n2), env ->
let m1 = eval n1 env in
let m2 = eval n2 env in
m1 +. m2
|SUB (n1,n2), env ->
let m1 = eval n1 env in
let m2 = eval n2 env in
m1 -. m2
|MUL (n1,n2), env ->
let m1 = eval n1 env in
let m2 = eval n2 env in
m1 *. m2
|DIV (n1,n2), env ->
let m1 = eval n1 env in
let m2 = eval n2 env in
m1 /. m2
|SIGMA(n1,n2,n3), env ->
let m1 = eval n1 env in
let m2 = eval n2 env in
if m1 > m2 then raise Error
else if (m1 = m2) then (eval n3 (m1::env))
else (eval n3 (m1::env)) +. (eval (SIGMA (ADD (n1 , INT 1), n2, n3)) env)
in eval exp[]
Я получаю сообщение об ошибке в конце, ошибка: это выражение имеет тип float -> float, но ожидалось выражение типа exp
Как мне изменить 'в eval exp []' ?
В ожидании вашей помощи .....