It makes no sense to write recursive functions like SUM or QUICKSORT like macros. Also, no, generally speaking, this is not possible. The macro extends the source code. At compile time, the macro only sees the source code, but not the real arguments that the code calls. After compilation, the macros disappear and are replaced by the code that it produces. Then this code is called with arguments. Thus, a macro cannot perform calculations at compile time based on argument values that are known only at run time.
The exception is: when the value of the argument is known during compilation / macro distribution time, the macro can expand to recursively invoke the macro on its own. But this is really an extended use of macros and nothing that could be added to code supported by other programmers.
Rule of thumb: If you want to perform recursive calculations, use functions. If you want to process the source code, use a macro.
Also, try using Lisp formatting. The editor counts parentheses, makes selections and indents. Do not put parentheses on your lines; they feel lonely. The usual Lisp style is more compact and uses horizontal space even more. If you work with lists, use FIRST and REST instead of CAR and CDR.
Your suma function will look like this:
(defun suma (list) (if (rest list) (+ (suma (rest list)) (first list)) (first list)))
Forget about the macro. But, if you want to know more about macros, then the book " On Lisp ", written by Paul Graham (available for download), is a good source of knowledge.
source share