2013-10-04 28 views
8

比方说,我们有这个自由点功能:f1 =翻转常量映射。这个功能如何工作?

f1 = flip const map 

我茫然不知究竟它的工作原理和什么是应该做的? 也就是说我知道地图,常量和翻转函数是什么。但把这些放在一起对我来说没有意义。这个函数究竟发生了什么? 似乎每次都会传回同样的东西,但是......为什么?

回答

5

请记住,Haskell中的所有函数只接受一个参数,但通过返回另一个函数来模拟多个参数。所以flip const map也可以写成(flip const) mapconst通常会忽略其第二个参数并返回其第一个参数。 flip反转参数的顺序,所以flip const忽略第一个参数并返回第二个参数。因此map被忽略,并且返回一个总是返回它的参数的函数。

4

如果你把map以外的东西放在那里真的没关系。表达式flip const翻转const的参数,因此不是总是返回其第一个参数,而是返回第二个参数。你可以通过重新定义f1 = flip const undefined来测试。如果undefined曾经被评估过,这将导致异常,但您可以看到它具有相同的行为。基本上,flip const undefined = id

14

让我们来看看这个函数所做的点点滴滴

flip const map x = (flip const) map x 
       = const x map 
       = x 

这就是为什么它总是返回你给它!