我试图在类型为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,不是吗?
这个表达式:
(List.fold_left (fun acc a -> Times(a::t)::acc) lst)
有一个功能类型。 List.fold_left
有3个参数,你只在这里传递2个。
编译器说你正在提供一个函数类型(pExp list -> pExp list
),其中需要一个非函数类型(pExp list
)。这确实是问题所在。
很可能你遗漏了函数和lst
之间的初始值。