Soweit ich gesehen habe, arbeiten Clojure Kernfunktionen fast immer für verschiedene Arten der Sammlung, z. conj
, first
, rest
, etc. Ich bin ein wenig verwirrt, warum disj
und dissoc
sind jedoch unterschiedlich; sie haben die exakt gleiche Signatur:Warum sind `disj` und` dissoz` unterschiedliche Funktionen in Clojure?
(dissoc map) (dissoc map key) (dissoc map key & ks)
(disj set) (disj set key) (disj set key & ks)
und ziemlich ähnliche Semantik. Warum sind diese nicht beide durch die gleiche Funktion abgedeckt? Das einzige Argument, das ich dafür sehen kann, ist, dass Karten sowohl (assoc map key val)
als auch (conj map [key val])
Einträge hinzufügen können, während Sets nur (conj set k)
unterstützen.
kann ich eine einzeilige Funktion schreiben, um diese Situation zu handhaben, aber Clojure sind so elegant, so viel von der Zeit, dass es wirklich für mich ist schrill, wenn es nicht