myFlip如何f = \ x y - >你工作吗?

时间:2018-06-11 14:16:25

标签: haskell functional-programming

在Allen和Moronuki的Haskell一书中,在第240页,它被作为 flip 函数的实现给出了

myFlip :: (a -> b -> c) -> b -> a -> c
myFlip f = \ x y -> f y x

但是,我不明白这是如何工作的?特别是,当我将 f 的两个参数提供为

flippedF = flip f
flippedF p q

Haskell如何在实现中将 p q x y 匹配?

2 个答案:

答案 0 :(得分:6)

它是一个lambda函数。它匹配输入。就像map (\x -> x+1) [1..10]匹配列表中的每个x一样。

因此,如果函数而不是此形式(\x y -> f x y) p q,则它会匹配两个输入元素。

答案 1 :(得分:5)

正如您已定义myFlip f = ،،,只要您看到myFlip f某处将其替换为定义(如果参数被称为与f不同的参数),您就可以使用flippedF = myFlip f当然需要替代它。)

因此,定义flippedF = \x y -> f y x等同于flippedF x y = f y x ,或者我们通常会将其写为

flippedF p q

(这实际上只是lambda配方的语法糖)。如果您随后评估xyp参数将分别替换为qflippedF p q ≡ (let x = p; y = q in f y x) ≡ f q p ,就像在任何其他函数调用中一样。

<figure>
    <img src="" alt="">
    <figcaption>
        <p>Text</p>
    </figcaption>
</figure>