我有以下類型值,我想要做這些類型的計算基礎,但我得到了一個錯誤,說:ocaml的定義類型,並將其用於計算
這個表達型價值,但一表達預期的類型int
那麼我該怎麼做計算?
type binop =
| Plus
| Minus
| Mul
| Div
| Eq
| Ne
| Lt
| Le
| And
| Or
| Cons
type expr =
| Const of int
| True
| False
| NilExpr
| Var of string
| Bin of expr * binop * expr
| If of expr * expr * expr
| Let of string * expr * expr
| App of expr * expr
| Fun of string * expr
| Letrec of string * expr * expr
type value =
| Int of int
| Bool of bool
| Closure of env * string option * string * expr
| Nil
| Pair of value * value
val x : value = Int 1
val x : value = Int 1
當我做這個
x+x;;
那麼它拋出的錯誤,我想是這樣的:
Nano.value = Int 2
修復這樣的事情,它將返回value = Int
的東西,但我想Nano.value = Int
東西,和一個名爲Nano.ml的文件,所以我想Nano.value
let add (x,y) = match (x,y) with
| (Int xx, Int yy) -> Int (xx + yy)
| (_ , _) -> Int 0
我應該更新類型,看到是會幫助「+」? – user1968057 2013-02-15 17:33:21
不,+具有類型:'int - > int - > int';你應該爲你的類型定義你自己的加法運算符,如'value - > value - > value'。 – nlucaroni 2013-02-15 17:35:44
我寫過這樣的東西。以上在修復區域。但它返回一個值= Int 10;但我想要Nano.value = Int 10; – user1968057 2013-02-15 19:03:02