假设我有一个如下所示的地图函数:
let rec map f xs = match xs with
[] -> []
| hd :: tl -> f hd :: (map f tl)
当我将地图的签名更改为let rec map xs f
时出现了一些错误,
谁能确定我缺乏哪些知识并解释原因?
答案 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)