title: why are `disj` and `dissoc` distinct functions in Clojure?
body: <p>So far as I've seen, Clojure's core functions almost always work for different types of collection, e.g. <code>conj</code>, <code>first</code>, <code>rest</code>, etc. I'm a little puzzled why <code>disj</code> and <code>dissoc</code> are different though; they have the exact same signature:</p>
  
  <pre><code>(dissoc map) (dissoc map key) (dissoc map key &amp; ks)
  (disj set) (disj set key) (disj set key &amp; ks)
  </code></pre>
  
  <p>and fairly similar semantics. Why aren't these both covered by the same function? The only argument I can see in favor of this is that maps have both <code>(assoc map key val)</code> and <code>(conj map [key val])</code> to add entries, while sets only support <code>(conj set k)</code>.</p>
  
  <p>I can write a one-line function to handle this situation, but Clojure is so elegant so much of the time that it's really jarring to me whenever it isn't :)</p>