Finding the sum of all the multiples of 3 or 5 below 1000
You are not using tail recursion in my-sum, so the compiler cannot easily turn it into iteration.
It depends on the specific problem; in this case I would probably do it iteratively.
Sure, loop is useful and convenient.


Here is my attempt:

(defun multiple-of-3-or-5 (x) 
    (or (zerop (mod x 3))
        (zerop (mod x 5))))
(defun my-sum (from to)
  (loop :for i :from from :to to
    :when (multiple-of-3-or-5 i) 
    :sum i))