首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OCaml中的CPS : type不检查

OCaml中的CPS : type不检查
EN

Stack Overflow用户
提问于 2016-03-22 14:56:44
回答 1查看 162关注 0票数 0

我正在做一个关于CPS的非常简单的OCaml练习。第8-10行是将两个递归调用转换为一个尾递归.但是,编译器会抱怨第8行的类型:

文件"tmp.ml",第8行,字符9-14: 错误:此表达式类型为int -> int -> (int -> int) -> int,但表达式应为int类型。

我理解编译器期望第8行有一个int,因为第6行返回一个int。但是有人能说明为什么第8-10行的类型不是int吗?

代码语言:javascript
运行
复制
  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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 15:00:28

f i n-1被解析为(f i n)-1,而不是您所期望的f i (n-1)

另外,

代码语言:javascript
运行
复制
let rec f i n k (i:int) (n:int) (k:int->int) :int

意味着您的函数采用6参数:inkink。你可能打算写:

代码语言:javascript
运行
复制
let rec f (i:int) (n:int) (k:int->int) :int
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36157809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档