0
  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 }

返回错误:错误:此表达式的类型为字符串列表 -> 字符串列表,但表达式应为字符串列表 -> 字符串列表列表类型字符串与字符串列表类型不兼容

我认为我们需要以某种方式将 func 放入列表中,但是我尝试过的每种方法似乎都不起作用!任何帮助表示赞赏..

4

2 回答 2

1

我的建议是你改变

let func p = p in func

[ let func p = p in func ]

或者你可以使用更紧凑的:

[ fun p -> p ]

这是基于观察到其他替代方案arguments返回列表但第一个替代方案没有。

于 2015-02-28T18:26:01.780 回答
0

我假设您正在尝试使用您在别处定义的 << 运算符组合函数。

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

于 2015-03-01T20:45:00.623 回答