Что делает функция флип?

Я новичок в чистоскрипте. Это книга 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??. Я поражен этим. Пожалуйста, объясните концепцию флипа, и если книга, о которой я говорю, не очень хороша, предложите другие материалы.


person Previn    schedule 02.09.2017    source источник


Ответы (1)


Функция flip меняет порядок аргументов функции с двумя аргументами. Рассмотрим простую функцию subtract:

subtract :: Int -> Int -> Int
subtract a b = a - b

subtract 4 3
-- 4 - 3 = 1

Если flip вызывается в функции subtract, она меняет число, из которого вычитается:

(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 как на функцию, которая принимает функцию с двумя аргументами в качестве аргумента и в результате возвращает другую функцию с двумя аргументами:

flip :: forall a b c.
    (a -> b -> c) -- takes a function
    -> (b -> a -> c) -- returns a function with flipped arguments

Один из вариантов использования flip — это когда вы хотите частично применить функцию, но аргумент, который вы хотите частично применить, стоит на втором месте. Затем вы можете flip использовать исходную функцию и частично применить полученную функцию.

person bklaric    schedule 02.09.2017
comment
Спасибо чувак. Кажется очищено. Но что означает (show int) в строке showIntAndString int string = (show int) <> string - person Previn; 02.09.2017
comment
Пожалуйста. show возвращает строковое представление своего аргумента. Очень похоже на toString() на других языках. Например. show 123 равно "123". Дополнительную информацию о функциях и типах в PureScript можно найти на странице Pursuit. Вот документация для show . - person bklaric; 02.09.2017
comment
Это должно быть добавлено в книгу purescript. Очень хорошие приложения для реальной жизни - person a1300; 21.12.2020