ocaml函数的参数顺序

时间:2016-04-01 01:12:56

标签: functional-programming ocaml

假设我有一个如下所示的地图函数:

let rec map f xs = match xs with
[] -> []
| hd :: tl -> f hd :: (map f tl)

当我将地图的签名更改为let rec map xs f时出现了一些错误, 谁能确定我缺乏哪些知识并解释原因?

2 个答案:

答案 0 :(得分:2)

如果更改定义和递归调用,则没有问题。

# let rec map xs f = match xs with
  [] -> []
  | hd :: tl -> f hd :: (map tl f);;
val map : 'a list -> ('a -> 'b) -> 'b list = <fun>
# map [3; 5; 7] ((+) 1);;
- : int list = [4; 6; 8]

答案 1 :(得分:2)

您应该可以使用xs

切换f

您必须确保更改的唯一方法是第3行的订单(map f tl)(map tl f)