Как работает myFlip f = \ xy -> fyx? - PullRequest
0 голосов
/ 11 июня 2018

В книге Аллена и Моронуки на Хаскеле, на странице 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 голосов
/ 11 июня 2018

Как вы определили myFlip f = ???،???،, вы можете всякий раз, когда вы видите myFlip f, где-то заменить его определением (если параметр называется чем-то отличным от f, вам, конечно, придется его заменить).

Итак, определение flippedF = myFlip f эквивалентно flippedF = \x y -> f y x, или, как мы обычно пишем,

flippedF x y = f y x

(что на самом деле просто синтаксический сахар для лямбда-формулировки).Если вы затем оцените flippedF p q, параметры x и y будут заменены на p и q, соответственно, так же, как и при любом другом вызове функции.

flippedF p q ≡ (let x = p; y = q in f y x)
             ≡ f q p
0 голосов
/ 11 июня 2018

это лямбда-функция.это соответствует входу.Как map (\x -> x+1) [1..10] будет соответствовать каждому х в списке.

Таким образом, если функция вместо этой формы (\x y -> f x y) p q, она соответствует двум элементам ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...