let rec
map2 (f : 'a * 'b -> 'c) (l1 : 'a list) (l2 : 'b list) : 'c list =
match (l1,l2) with
| ([], []) -> []
| (x::l1),(y::l2) -> f (x, y)::(map2 f (l1, l2))
它正在回归:
Error: This expression has type 'a list * 'a list
but an expression was expected of type 'a list
我在这里做错了什么?
答案 0 :(得分:10)
错误是map2 f (l1, l2)
(因为错误位置会告诉您)。您将(l1, l2)
作为元组传递,而它们应该是单独的curried参数:map2 f l1 l2
。
此外,您的函数不处理不同长度的情况(一个列表为空而不是另一个列表的模式)。在这种情况下,该函数会引发匹配失败,您可能希望引发更专业的错误,例如invalid_arg "map2"
或其他。