TL;DR
defn、defmacro、defmultiなど、var を作る def フォームは、すべてdefをラップするマクロである。defonceは var に初期値が設定されていないときだけ設定し、defn-は名前空間の中からだけ参照できるプライベートな束縛を作る。
内容
defn や defmacro、defmulti など、var を作るための様々な種類の def フォームがある。これらはすべて、def をラップするマクロである。
defonce は、var に初期値が設定されていないときに限り設定する。
(defonce a-symbol initial-value?)defn- は defn と同じように動作するが、定義された名前空間の中からだけ参照できるプライベートな束縛を作る。
(defn- name & args-as-for-defn)このほかにも、プライベートな束縛を作る - の付いたバージョンが用意されている。