[英]How does myFlip f = \ x y -> f y x work?
在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匹配?
它是一个lambda函数。 它与输入匹配。 就像map (\\x -> x+1) [1..10]
会匹配列表中的每个x。
因此,如果函数不是这种形式(\\xy -> fxy) pq
它将匹配两个输入元素。
定义myFlip f = 𝑒𝑡𝑐،𝑒𝑡𝑐،
,您可以在任何地方看到myFlip f
替换为定义(如果参数被称为不同于f
东西,那么您当然需要替换它)。
因此,定义flippedF = myFlip f
等效于flippedF = \\xy -> fyx
,或者就像我们通常写的那样
flippedF x y = f y x
(实际上只是lambda公式的语法糖)。 如果随后求值flippedF pq
,则x
和y
参数将分别替换为p
和q
,就像在其他任何函数调用中一样。
flippedF p q ≡ (let x = p; y = q in f y x)
≡ f q p
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.