Function 如何使用编辑类型创建函数?

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

此时,使用c a,我收到一条错误消息

错误:此表达式的类型为exp 这不是一个函数;它无法应用


如何更正它?

错误信息似乎很清楚。变量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)