10

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

f1 = flip const map

我对它究竟是如何工作以及它应该做什么一无所知?即我知道什么是map、const 和flip 函数。但是像这样把它们放在一起对我来说没有意义。这个函数内部到底发生了什么?它似乎每次都会返回相同的东西,但是......为什么?

4

3 回答 3

15

让我们一点一点地看看这个函数做了什么

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

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

于 2013-10-04T16:39:27.793 回答
6

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

于 2013-10-04T14:31:09.797 回答
5

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

于 2013-10-04T14:27:32.637 回答