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 做一些事情。
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 做一些事情。