翻转功能有什么作用?
What does the flip function do?
我是纯脚本的新手。这是我正在学习的书Leanpub-purescript。我不明白什么是翻转功能。这类似于交换概念吗?
> :type flip
forall a b c. (a -> b -> c) -> b -> a -> c
表示a value goes to b, then b to a, then c is itself??
。我对此感到震惊。请解释一下翻转的概念,如果我提到的书不好,建议一些其他材料
flip
函数反转双参数函数的参数顺序。考虑一个简单的 subtract
函数:
subtract :: Int -> Int -> Int
subtract a b = a - b
subtract 4 3
-- 4 - 3 = 1
如果在 subtract
函数上调用 flip
,它会更改要减去的数字:
(flip subtract) 4 3
-- 3 - 4 = -1
它也适用于不同参数类型的函数:
showIntAndString :: Int -> String -> String
showIntAndString int string = (show int) <> string
showIntAndString 4 "asdf"
-- "4asdf"
(flip showIntAndString) "asdf" 4
-- "4asdf"
如果它对您更有意义,请尝试将 flip 视为一个函数,它接受一个双参数函数作为参数,returns 另一个双参数函数作为结果:
flip :: forall a b c.
(a -> b -> c) -- takes a function
-> (b -> a -> c) -- returns a function with flipped arguments
flip
的一个用例是当您想要部分应用一个函数,但您想要部分应用的参数在第二位时。然后,您可以 flip
原始函数,并部分应用生成的函数。
我是纯脚本的新手。这是我正在学习的书Leanpub-purescript。我不明白什么是翻转功能。这类似于交换概念吗?
> :type flip
forall a b c. (a -> b -> c) -> b -> a -> c
表示a value goes to b, then b to a, then c is itself??
。我对此感到震惊。请解释一下翻转的概念,如果我提到的书不好,建议一些其他材料
flip
函数反转双参数函数的参数顺序。考虑一个简单的 subtract
函数:
subtract :: Int -> Int -> Int
subtract a b = a - b
subtract 4 3
-- 4 - 3 = 1
如果在 subtract
函数上调用 flip
,它会更改要减去的数字:
(flip subtract) 4 3
-- 3 - 4 = -1
它也适用于不同参数类型的函数:
showIntAndString :: Int -> String -> String
showIntAndString int string = (show int) <> string
showIntAndString 4 "asdf"
-- "4asdf"
(flip showIntAndString) "asdf" 4
-- "4asdf"
如果它对您更有意义,请尝试将 flip 视为一个函数,它接受一个双参数函数作为参数,returns 另一个双参数函数作为结果:
flip :: forall a b c.
(a -> b -> c) -- takes a function
-> (b -> a -> c) -- returns a function with flipped arguments
flip
的一个用例是当您想要部分应用一个函数,但您想要部分应用的参数在第二位时。然后,您可以 flip
原始函数,并部分应用生成的函数。