В прошлом я использовал erlang, и у него есть некоторые действительно полезные вещи, такие как функции сопоставления с образцом или «защита функций». Пример из документации erlang:
fact(N) when N>0 ->
N * fact(N-1);
fact(0) ->
1.
Но это может быть расширено до гораздо более сложного примера, где форма параметра и значения внутри него совпадают.
Есть ли что-нибудь похожее в clojure?