【发布时间】:2016-07-09 13:00:34
【问题描述】:
我正在做一个关于 CPS 的非常简单的 OCaml 练习。第 8-10 行是将两个递归调用转换为一个尾递归。但是,编译器抱怨第 8 行的类型:
文件“tmp.ml”,第 8 行,字符 9-14:
错误:此表达式的类型为 int -> int -> (int -> int) -> int 但是需要一个 int 类型的表达式
我知道编译器在第 8 行需要一个 int,因为第 6 行返回一个 int。但是有人能说明为什么第 8-10 行的类型不是 int 吗?
4 let rec f i n k (i:int) (n:int) (k:int->int) :int =
5 if i + n < 0 then
6 k 1
7 else
8 (f i (n-1) (fun v ->
9 f (i-1) n (fun vv->
10 k (v + vv))))
11 in f 1 1 (fun x -> x)
【问题讨论】:
-
你试过省略类型注释吗?很容易从使用的运算符中推断出类型。
标签: functional-programming ocaml