繁体   English   中英

myFlip f = \\ xy-> fyx如何工作?

[英]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如何在实现中将pqxy匹配?

它是一个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 ,则xy参数将分别替换为pq ,就像在其他任何函数调用中一样。

flippedF p q ≡ (let x = p; y = q in f y x)
             ≡ f q p

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM