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

Pet*_*sák 9 haskell const map flip pointfree

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

f1 = flip const map
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*lis 15

让我们一点一点地看看这个功能是做什么的

flip const map x = (flip const) map x
                 = const x map
                 = x
Run Code Online (Sandbox Code Playgroud)

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


bhe*_*ilr 5

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


Dir*_*ple 5

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