title: Can be this lisp function be implemented recursively?
body: <p>The goal of this function is to generate the cartesian product of 2 list.
  For example</p>
  
  <ul>
  <li><p>(combo (list 1 2 3) (list 4 5))  => (1 4) (1 5) (2 4) (2 5) (3 4) (3 5)</p>
  
  <pre><code>(defun combo (l1 l2)
  (let    (
              (res (list))
          )
      (dolist (elem1 l1 res)
          (dolist (elem2 l2 res)
              (setq res (append res (list(list elem1 elem2))))
          )
      )
  )
  </code></pre>
  
  <p>)</p></li>
  </ul>
  
  <p>How could be implemented recursively?</p>