比方说,我们有这个自由点功能:f1 =翻转常量映射。这个功能如何工作?
f1 = flip const map
我茫然不知究竟它的工作原理和什么是应该做的? 也就是说我知道地图,常量和翻转函数是什么。但把这些放在一起对我来说没有意义。这个函数究竟发生了什么? 似乎每次都会传回同样的东西,但是......为什么?
比方说,我们有这个自由点功能:f1 =翻转常量映射。这个功能如何工作?
f1 = flip const map
我茫然不知究竟它的工作原理和什么是应该做的? 也就是说我知道地图,常量和翻转函数是什么。但把这些放在一起对我来说没有意义。这个函数究竟发生了什么? 似乎每次都会传回同样的东西,但是......为什么?
请记住,Haskell中的所有函数只接受一个参数,但通过返回另一个函数来模拟多个参数。所以flip const map
也可以写成(flip const) map
。 const
通常会忽略其第二个参数并返回其第一个参数。 flip
反转参数的顺序,所以flip const
忽略第一个参数并返回第二个参数。因此map
被忽略,并且返回一个总是返回它的参数的函数。
如果你把map
以外的东西放在那里真的没关系。表达式flip const
翻转const
的参数,因此不是总是返回其第一个参数,而是返回第二个参数。你可以通过重新定义f1 = flip const undefined
来测试。如果undefined
曾经被评估过,这将导致异常,但您可以看到它具有相同的行为。基本上,flip const undefined = id
。
让我们来看看这个函数所做的点点滴滴
flip const map x = (flip const) map x
= const x map
= x
这就是为什么它总是返回你给它!