我有以下类型值,我想要做这些类型的计算基础,但我得到了一个错误,说: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