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 }返回一个错误:错误:这个表达式有类型字符串列表->字符串列表,但是一个表达式需要类型字符串列表->字符串列表类型字符串与类型字符串列表不兼容
我认为我们需要在列表中加入乐趣,但我尝试过的每一种方式似乎都行不通!任何帮助都很感激..。
发布于 2015-03-01 20:45:00
我假设您正在尝试使用您在其他地方定义的<<操作符来组合函数。
不幸的是,$3并不代表一个函数,而是一个函数列表,因此在组合函数之前,您需要对$3做一些事情。
发布于 2015-02-28 18:26:01
我的建议是你改变
let func p = p in func至
[ let func p = p in func ]或者你可以用更紧凑的:
[ fun p -> p ]这是基于这样的观察,即arguments的其他替代方案返回一个列表,但第一个选项没有返回列表。
https://stackoverflow.com/questions/28785177
复制相似问题