Haskell:函数语法的解释

时间:2015-10-11 04:13:43

标签: haskell

在这个自定义版本的地图功能中,有一个“f”是几个点。我不确定函数中f的含义(我是Haskell的初学者)。它与高阶函数有关吗?有人可以解释f的意思,然后解释实际功能在创建地图功能方面的作用吗?

map f [] = []
map f (a:b) = f a:map f b

2 个答案:

答案 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}}。