Интересно как некоторые математики использовали нотацию обратную общепринятой, и писали например так: (x)fg Что означает "возьми x, примени f, потом примени g". Что особенно интересно конкретно для меня — в программировании стандартная нотация (g o f)(x) совпадает с вложенным вызовом функции: print(random(4))
А вот обратная нотация совпадает с builder паттерном (покажу на примере итераторов в Rust): (0..999).iter().filter(|x| x.is_odd()).take(50)
Лично мне builder паттерн нравится намного больше вложенных функций.
А ещё в Haskell (это матан, который математики пытаются выдать за язык программирования) в основном используются операторы для стандартного применения функций: g . f x g $ f $ x
Но есть и операторы для обратного: f >>> g x x & f & g
Их можно даже совмещать. Например: show $ x & functions & doing & something & terrible & to_that_x
выведет результат всех функций, применённых к x.