Function 如何使用编辑类型创建函数?
此时,使用c a,我收到一条错误消息 错误:此表达式的类型为exp 这不是一个函数;它无法应用Function 如何使用编辑类型创建函数?,function,ocaml,Function,Ocaml,此时,使用c a,我收到一条错误消息 错误:此表达式的类型为exp 这不是一个函数;它无法应用 如何更正它?错误信息似乎很清楚。变量c表示exp类型的东西,它不是函数。所以你不能只是为了得到结果而打电话。另一方面,您正在编写一个函数来计算exp类型的值。因此,要做的事情可能是递归调用您的函数来计算c的值 这很复杂,因为据我所知,你希望X的值在不同的时间是不同的。在调用计算器函数的过程中,您似乎需要做一些工作来跟踪X的当前值。thx回答,我曾经如何编辑过sigma,b,c->let rec sig
如何更正它?错误信息似乎很清楚。变量c表示exp类型的东西,它不是函数。所以你不能只是为了得到结果而打电话。另一方面,您正在编写一个函数来计算exp类型的值。因此,要做的事情可能是递归调用您的函数来计算c的值
这很复杂,因为据我所知,你希望X的值在不同的时间是不同的。在调用计算器函数的过程中,您似乎需要做一些工作来跟踪X的当前值。thx回答,我曾经如何编辑过sigma,b,c->let rec sigma a,b,c=如果a>b,则0其他c a+sigma+1,b,c。。但它没有跟踪计算器函数的当前值。。。。
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 a -> a
| ADD (a, b) -> calculator a + calculator b
| SUB (a, b) -> calculator a - calculator b
| MUL (a, b) -> calculator a * calculator b
| DIV (a, b) -> calculator a / calculator b
| SIGMA (a, b, c) -> if a>b then 0 else (c a) + SIGMA( (a+1) ,b ,c)