我试图在类型为pExp(用户定义类型)的列表上使用从List.fold_left返回的列表。这样做的目的是创建一个Times列表(pExp列表),该列表以Plus l类型匹配。
let eval (lst: pExp list): pExp list =
match lst with
| [] -> []
| other patterns
| Plus l::t -> (List.fold_left (fun acc a -> Times(a::t)::acc) lst)
(* For each item a in l, append it to t and make it a Times *)
| _ -> []
我希望List.fold_left返回一个pExp列表,但出现此错误。
Error: This expression has type pExp list -> pExp list
but an expression was expected of type pExp list
错误消息的第一行指示fold_left返回一个pExp,它恰好是所期望的,不是吗?
答案 0 :(得分:2)
此表达式:
(List.fold_left (fun acc a -> Times(a::t)::acc) lst)
具有功能类型。 List.fold_left
接受3个参数,而您只在这里传递2个参数。
编译器说您正在提供应为非函数类型(pExp list -> pExp list
)的函数类型(pExp list
)。确实是问题所在。
您很有可能在函数和lst
之间遗漏了初始值。