Haskell: foldl Функция применяется как инфиксная функция? - PullRequest
0 голосов
/ 01 июля 2018

Применяется ли функция, которую я даю foldl, инфиксным способом?

Пример

foldl (-) 0 [1,2,3]

= 0-1-2-3 
= -6

в общем:

foldl f x [a,b,c]

применяется как:

(((x `f` a) `f`  b) `f` c)

Я знаю, что это рекурсивно, но могу ли я думать об этом таким образом?

1 Ответ

0 голосов
/ 01 июля 2018

Единственная разница между приложением инфиксной функции и приложением префиксной функции заключается в синтаксисе, поэтому ваш вопрос не имеет особого смысла. Помимо ссылки на синтаксис определенного выражения, применение функции «инфиксным способом» ничего не значит.

В Haskell, когда вы пишете x + y, это точно эквивалентно написанию (+) x y. Аналогично, x `op` y точно эквивалентно написанию op x y. Другими словами, приложение инфиксного оператора все еще является простым приложением старой функции, где функция применяется к двум аргументам.

Если это поможет вам визуализировать foldl с помощью выражения, подобного ((a `f` b) `f` c) `f` d вместо выражения, подобного f (f (f a b) c) d, это, безусловно, находится в вашем праве, поскольку оба выражения эквивалентны. Действительно, документация для foldl использует инфиксную нотацию, чтобы помочь объяснить поведение функции, поскольку это полезное представление, которое помогает понять суть. Но будьте осторожны, чтобы не перепутать обозначение (он же синтаксис) с обозначением (он же означает). Многие программы могут быть нотационно отличными, но денотационно эквивалентными.

...