繁体   English   中英

OCaml中的CPS:类型不检查

[英]CPS in OCaml: type doesn't check

我正在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)

fi n-1被解析为(fin)-1而不是您可能期望的fi (n-1)

另外,

let rec f i n k (i:int) (n:int) (k:int->int) :int

表示您的函数采用6个参数: inkink 您可能打算写:

let rec f (i:int) (n:int) (k:int->int) :int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM