Haskell: foldl Функция применяется как инфиксная функция?

Является ли функция, которую я даю 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 ответ

Решение

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

В Хаскеле, когда ты пишешь 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 использует инфиксную нотацию, чтобы помочь объяснить поведение функции, так как это полезное представление, которое помогает понять суть. Но будьте осторожны, чтобы не перепутать обозначение (он же синтаксис) с обозначением (он же смысл). Многие программы могут быть нотационно отличными, но денотационно эквивалентными.

Другие вопросы по тегам