首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml类型不兼容- OCamlyacc

OCaml类型不兼容- OCamlyacc
EN

Stack Overflow用户
提问于 2015-02-28 18:18:08
回答 2查看 759关注 0票数 0
代码语言:javascript
复制
  funcexpr:  /* This is a function: arguments -> string list */
   LPAREN HEAD arguments RPAREN                     { let head a = [List.hd (List.hd a)] in head << $3 }
 | LPAREN REAR arguments RPAREN                     { let rear b = List.tl (List.hd b) in rear << $3 }
 | LPAREN ERECT arguments RPAREN                    { let erect c = List.append (List.hd c) (List.hd (List.tl c)) in erect << $3 }
   ;
 arguments:  /* This is a list of functions */
   PARAM                                            { let func p = p in func }
 | funcexpr                                         { [$1] }
 | arguments arguments                              { List.append $1 $2 }

返回一个错误:错误:这个表达式有类型字符串列表->字符串列表,但是一个表达式需要类型字符串列表->字符串列表类型字符串与类型字符串列表不兼容

我认为我们需要在列表中加入乐趣,但我尝试过的每一种方式似乎都行不通!任何帮助都很感激..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-01 20:45:00

我假设您正在尝试使用您在其他地方定义的<<操作符来组合函数。

不幸的是,$3并不代表一个函数,而是一个函数列表,因此在组合函数之前,您需要对$3做一些事情。

票数 0
EN

Stack Overflow用户

发布于 2015-02-28 18:26:01

我的建议是你改变

代码语言:javascript
复制
let func p = p in func

代码语言:javascript
复制
[ let func p = p in func ]

或者你可以用更紧凑的:

代码语言:javascript
复制
[ fun p -> p ]

这是基于这样的观察,即arguments的其他替代方案返回一个列表,但第一个选项没有返回列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28785177

复制
相关文章

相似问题

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