OCaml 类型不兼容 - OCamlyacc

OCaml Types not compatible - OCamlyacc

  funcexpr:  /* This is a function: arguments -> string list */
   LPAREN HEAD arguments RPAREN                     { let head a = [List.hd (List.hd a)] in head <<  }
 | LPAREN REAR arguments RPAREN                     { let rear b = List.tl (List.hd b) in rear <<  }
 | LPAREN ERECT arguments RPAREN                    { let erect c = List.append (List.hd c) (List.hd (List.tl c)) in erect <<  }
   ;
 arguments:  /* This is a list of functions */
   PARAM                                            { let func p = p in func }
 | funcexpr                                         { [] }
 | arguments arguments                              { List.append   }

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

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

我的建议是你改

let func p = p in func

[ let func p = p in func ]

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

[ fun p -> p ]

这是基于 arguments return 列表的其他备选方案但第一个备选方案没有的观察结果。

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

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