title: In common-lisp, how can I insert an element into a list in-place?
body: <p>Two questions:</p>
  
  <p>1.I want a function to insert an element inside a list in-place (in any position but the start of the list, see question 2 for the reason) such that:</p>
  
  <pre><code>CL&gt; (defun insert-in-place (the-list after-position new-element) .... ) =&gt; ...
  CL&gt; (setf testy-list (list 'a 'b 'c 'd)) =&gt; ...  
  CL&gt; testy-list =&gt; ('A 'B 'C 'D)  
  CL&gt; (insert-in-place testy-list 1 'BOOOO) =&gt; ...  
  CL&gt; testy-list =&gt; ('A 'B 'BOOOO 'C 'D)
  </code></pre>
  
  <p>2.I think that inserting an element into the start of the list in-place is impossible through a function because the args are passed by value, so since the first cons cell of the list is passed, it is passed by value and it is a copy and so changing its car only changes a copy car, not the original, although the following cons cells are shared and change in place is possible. Am I correct?</p>