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)
这就是为什么它总能回报你给它的东西!
如果您没有map在其中放置其他东西,那真的没关系。该表达式flip const翻转的参数const,因此它并不总是返回其第一个参数,而是返回其第二个参数。您可以通过重新定义进行测试f1 = flip const undefined。如果undefined曾经评估过,这将导致异常,但是您可以看到它具有相同的行为。本质上,flip const undefined = id。
请记住,Haskell中的所有函数只接受一个参数,但通过返回另一个函数来模拟获取多个参数.所以flip const map也可以写成(flip const) map.const通常忽略其第二个参数并返回其第一个参数.flip颠倒参数的顺序,因此flip const忽略第一个参数并返回第二个参数.因此map被忽略并返回一个始终返回其参数的函数.
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |