在这个自定义版本的地图功能中,有一个“f”是几个点。我不确定函数中f的含义(我是Haskell的初学者)。它与高阶函数有关吗?有人可以解释f的意思,然后解释实际功能在创建地图功能方面的作用吗?
map f [] = []
map f (a:b) = f a:map f b
答案 0 :(得分:5)
f是一个函数,它是map函数的一个参数,因为map具有以下类型:
map :: (a -> b) -> [a] -> [b]
它是一个函数,从a到b和a类型的元素列表,然后使用作为第一个参数传递的函数将列表转换(作为第二个参数传递)在b类型的元素列表中使用函数(作为第一个参数传递)
此功能对于遍历应用函数的列表非常有用。
我们说我有一个数字列表
例如:
[2,3,4,5]
如果我想为列表的每个元素添加1,我可以使用map如下:
map (+1) [2,3,4,5]
或者如果您更喜欢使用lambda:
map (\x -> x+1) [2,3,4,5]
我们会得到答案:
[3,4,5,6]
所以在map
的实现中map f [] = []
map f (a:b) = f a:map f b
我们可以看到f是这个函数,用于通过将列表应用于列表的每个元素来转换列表
实现是递归的,直到逐个元素转换元素并将它们附加到列表中,因此列表的顺序与应用函数之前的顺序相同。
答案 1 :(得分:2)
在map
定义中,f
是您提供给它的第一个参数。您的第一个模式匹配也可以使用lambda来定义,以表示参数来自的 :
map f [] = -- ...
map \f -> \[] -> -- ...
在第二个定义中,您将递归(:)
模式匹配的内容:
map f (x:xs) = (f x) : (map f xs)
我正在将f
应用于我们看到x
的第一个元素,然后将结果导致map
通过其余{{}}的递归调用{1}}。