(- 5) 5
выдает ошибку, потому что префикс минус - это особый случай в синтаксисе языка: (- 5)
означает минус пять, число, а не функция, которая вычитает пять (см. Также: Curry вычитание ). В связи с этим я остановлюсь на случае (+)
, который не является исключительным.
Во втором выражении, map (\f x -> f 5 x) [(-),(+),(*)]
, второй элемент списка результатов будет:
(\f x -> f 5 x) (+)
При оценке таких вещей вручную важно соблюдать осторожность, чтобы не перепутать префиксное, инфиксное и секционированное использование операторов. Приложение здесь выдает ...
\x -> (+) 5 x -- Prefix syntax (note the parentheses around the operator)
... что эквивалентно ...
\x -> 5 + x -- Infix syntax
... и до:
\x -> (5 +) x -- Left section
\x -> (+ x) 5 -- Right section
(5 +) -- Left section, pointfree
Таким образом, разделы, которые создаются по шаблону после использования инфиксных операторов, должны быть наоборот относительно вашего вопроса. Что касается map ($ 5) [(-),(+),(*)]
, оно эквивалентно map (\f x -> f 5 x) [(-),(+),(*)]
, вашему второму выражению. Вы можете подтвердить это, используя тот факт, что ($) f x = f x
, чтобы выяснить, что такое правый раздел ($ 5)
.