->
и ->>
эквивалентны, если все функции принимают только один аргумент. В противном случае ->
передает значение, являющееся нитью в виде аргумента first , в функцию, а ->>
передает его в качестве аргумента last . Следующий пример должен прояснить это:
(-> x
(f 1 2)
(g 3 4)
(h 5 6))
становится
(h (g (f x
1 2)
3 4)
5 6)
или h(g(f(x, 1, 2), 3, 4), 5, 6)
(->> x
(f 1 2)
(g 3 4)
(h 5 6))
становится
(h 5 6
(g 3 4
(f 1 2 x)))
или h(5, 6, g(3, 4, f(1, 2, x)))
Редактировать : (Отвечая на Редактировать в вопросе, копируя это из комментариев).
Пример не работает, потому что макрос ->
вставляет 3 в качестве первого аргумента mkinc
.
См. (macroexpand-1 '(-> 3 (mkinc 2)))
, чтобы лучше это понять.
Это работает: (-> 3 ((mkinc 2)))
.
См. (macroexpand-1 '(-> 3 ((mkinc 2))))
, чтобы понять, почему.