В синтаксисе:
myFunction x = x + 2
вещи слева от знака равенства x
рассматриваются как «параметры». Вы можете использовать их в правой части знака равенства, чтобы указать, каким должен быть результат.
Этот синтаксис определяет функцию myFunction
с одним параметром x
.
Итак, у нас есть:
flip' f = g
Это определяет функцию flip'
с одним параметром f
.
У нас есть и другое определение:
g x y = f y x
Это определяет функцию g
с двумя параметрами, x
и y
.
Итак, когда мы говорим:
flip' f = g
where
g x y = f y x
Мы говорим, что результатом flip f
является функция g
, где g
определяется как g x y = f y x
.
Если вас сбивают с толку короткие имена переменных, вот та же функция с некоторыми именами, замененными для ясности:
flippity flop = glop
where
glop x y = flop y x
Посмотрите, можете ли вы понять, что делает flippity
, и посмотрите, можете ли вы увидеть, что это то же самое, что и flip'
, только с другими именами внутренних параметров и вспомогательных функций.
Помните также, что в Haskell мы всегда можем заменять вызовы функций их телом по большей части. Итак, мы можем переписать это как:
flippity flop = glop
where
glop = \x y -> flop y x
-- replace glop with its definition
flippity flop = \x y -> flop y x
Итак, мы видим, что flippity
- это функция, которая принимает функцию flop
и возвращает новую функцию \x y -> flop y x
.
person
Justin L.
schedule
04.06.2019