Clojureのエレガントではないところ

Clojure のエレガントなところ - hozumiの日記
一つの事をするのに複数の方法があるところ。
Pythonに毒された感覚ですが。

Python「誰もが正しいと考える、たった1つの方法をできる限り採用する(There should be one—and preferably only one—obvious way to do it)」という方針に従って設計されています。

Python 3.0ではreduce関数(Clojureのreductions)は組み込み関数ではなくなりました。ループで書くというベターな選択肢があるからです。mapもfilterも無名関数も、あまり推奨されていません。map/filterはリスト内包表記、無名関数も名前付き関数という、より良い選択肢があるからです。もちろん、後方互換性の問題がありますし、使わないわけでもないのでreduceもfunctools.reduceとして残っています。

Clojureにはdoseqに対するdotimesや、ifに対するif-notとif-letとwhenとcondのような、「便利な関数」が定義されてます。しかし「便利な関数」を大量に用意する必要があるということは、コアが綺麗ではないということです。条件式などでで冗長になりがちなのはS式の欠点です。

Clojureは、mapやvectorが関数として働く点などは、Pythonよりあるいみ綺麗なのですが、やはり
「公理は少ない方がいい」。例外はあっても。