В синтаксисе:
myFunction x = x + 2
вещи в левой части знака равенства, x
, рассматриваются как «параметры».Вы можете использовать их справа от знака равенства, чтобы указать, каким должен быть результат.
Этот синтаксис определяет функцию myFunction
с одним параметром x
.
* 1010.* Итак, у нас есть:
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
.