Это называется оператором "поток". Он написан как макрос, а не как обычная функция из соображений производительности, и поэтому может обеспечить хороший синтаксис - то есть он применяет преобразование во время компиляции.
Он несколько более мощный, чем описанный вами оператор |>, поскольку он предназначен для передачи значения через несколько функций, где каждое последующее значение «вставляется» в качестве первого параметра следующих вызовов функций. Вот несколько надуманный пример:
(-> [1]
(concat [2 3 4])
(sum)
((fn [x] (+ x 100.0))))
=> 110.0
Если вы хотите определить функцию точно так же, как оператор F #, который вы описали, вы можете сделать:
(defn |> [x f] (f x))
(|> 3 inc)
=> 4
Не уверен, насколько это полезно на самом деле, но вы все равно: -)
Наконец, если вы хотите передать значение через последовательность функций, вы всегда можете сделать что-то вроде следующего в clojure:
(defn pipeline [x & fns]
((apply comp fns) x))
(pipeline 1 inc inc inc inc)
=> 5