f1 =翻转const map。这个功能如何运作?

时间:2013-10-04 14:21:14

标签: haskell map const flip pointfree

假设我们有这个无点函数:

f1 = flip const map

我对它究竟是如何工作以及它应该做什么一无所知? 即我知道map,const和flip函数是什么。但是把这些放在一起对我来说没有意义。这个功能究竟发生了什么? 它似乎返回了我每次传递给它的同样的东西但是......为什么?

3 个答案:

答案 0 :(得分:15)

让我们一点一点地看看这个函数的作用

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

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