Clojure uses both parentheses and square brackets as part of its syntax. It might at first appear to be arbitrary, but it’s actually systematic. What’s more, it reveals one of the coolest things about Clojure: expressions define how they interpret their arguments.
Lisps are revered for their simple syntax, but parens are complex. They complect function calls and macro calls, which have drastically different semantics.