假设我们有这个无点函数:
f1 = flip const map
我对它究竟是如何工作以及它应该做什么一无所知? 即我知道map,const和flip函数是什么。但是把这些放在一起对我来说没有意义。这个功能究竟发生了什么? 它似乎返回了我每次传递给它的同样的东西但是......为什么?
答案 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) map
。 const
通常会忽略其第二个参数并返回其第一个参数。 flip
反转参数的顺序,因此flip const
忽略第一个参数并返回第二个参数。因此忽略map
并返回一个始终返回其参数的函数。