如何使用编辑类型创建功能?

时间:2017-10-25 17:50:43

标签: function ocaml

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)

此时,(c a),我收到了一条错误消息

  

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

我该如何纠正?

1 个答案:

答案 0 :(得分:1)

错误消息似乎很清楚。变量c表示exp类型的东西,它不是函数。所以你不能只是叫它来得到一个结果。另一方面,您正在编写一个函数来计算exp类型的值。所以要做的事情可能是调用你的函数(递归地)来计算c的值。

由于(据我所知)你希望X的值在不同时间不同而变得复杂。在调用X函数期间,您似乎需要做一些工作来跟踪calculator的当前值。