OCaml:函数输入('a *'b - >'c)

时间:2011-04-14 06:04:21

标签: function ocaml

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:10)

错误是map2 f (l1, l2)(因为错误位置会告诉您)。您将(l1, l2)作为元组传递,而它们应该是单独的curried参数:map2 f l1 l2

此外,您的函数不处理不同长度的情况(一个列表为空而不是另一个列表的模式)。在这种情况下,该函数会引发匹配失败,您可能希望引发更专业的错误,例如invalid_arg "map2"或其他。