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 这不是一个功能;它无法应用。
我该如何纠正?
答案 0 :(得分:1)
错误消息似乎很清楚。变量c
表示exp
类型的东西,它不是函数。所以你不能只是叫它来得到一个结果。另一方面,您正在编写一个函数来计算exp
类型的值。所以要做的事情可能是调用你的函数(递归地)来计算c
的值。
由于(据我所知)你希望X
的值在不同时间不同而变得复杂。在调用X
函数期间,您似乎需要做一些工作来跟踪calculator
的当前值。