title: Why does list* in Clojure only work with a vector in tail position?
body: <p>I am a clojure newbie. I am trying to play around <code>repl</code> and i see the following as output. And I don't quite understand why each of them behave so differently</p>
  
  <pre><code>(def a (list 1 2 3))  =&gt;#'test.core/a
  
  (list* 4 5 a)          =&gt;(4 5 1 2 3)
  
  (list* a 4 5)         =&gt;IllegalArgumentException Don't know how to create ISeq from: java.lang.Long  clojure.lang.RT.seqFrom (RT.java:542)
  </code></pre>
  
  <p>why does the above 2 statements behave the same way in the above 2 statements?</p>
  
  <pre><code>(list* 4 5 [1 2 3])     =&gt;(4 5 1 2 3)
  
  (list* 4 5 [a])       =&gt;(4 5 (1 2 3))
  
  (list* 4 5 (1 2))     =&gt;ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn  test.core/eval3837 (form-init633779145118520639.clj:1)
  </code></pre>
  
  <p>Could someone explain why each of the above statement has a different output?</p>