title: Why does Clojure distinguish between symbols and vars?
body: <p>I saw <a href="https://stackoverflow.com/questions/9113387/explanation-about-symbols-and-vars-and-their-differences-in-clojure">this question</a> already, but it doesn't explain what I am wondering about.</p>
  
  <p>When I first came to Clojure from Common Lisp, I was puzzled why it treats symbols and keywords as separate types, but later I figured it out, and now I think it is a wonderful idea. Now I am trying to puzzle out why symbols and vars are separate objects.</p>
  
  <p>As far I know, Common Lisp implementations generally represent a "symbol" using a structure which has 1) a string for the name, 2) a pointer to the symbol's value when evaluated in function call position, 3) a pointer to its value when evaluated outside call position, and 4) property list, etc.</p>
  
  <p>Ignoring the Lisp-1/Lisp-2 distinction, the fact remains that in CL, a "symbol" object points directly to its value. In other words, CL combines what Clojure calls a "symbol" and a "var" in a single object.</p>
  
  <p>In Clojure, to evaluate a symbol, first the corresponding var must be looked up, <em>then</em> the var must be dereferenced. Why does Clojure work this way? What benefit could there possibly be from such a design? I understand that vars have certain special properties (they can be private, or const, or dynamic...), but couldn't those properties simply be applied to the symbol itself?</p>