(defun cons-function (arg)
(cons arg '()))
(defmacro bad-macro (arg)
(list (cons-function arg)))
(defmacro good-macro (arg)
(list 'cons-function arg))
(defmacro good-macro-with-backquote (arg)
`(cons-function ,arg))
;; These forms are the equivalent to what will be happening during macro expansion
;; The result of each form - the expansion - will itself be evaluated
(apply (lambda (arg) (list (cons-function arg))) (list 3)) ; bad-macro
(apply (lambda (arg) (list 'cons-function arg)) (list 3)) ; good-macro
(apply (lambda (arg) `(cons-function ,arg)) (list 3)) ; good-macro-with-backquote
(cons-function 3) ; consing 3 and '() => the list (3)
(bad-macro 3)
(good-macro 3)
(good-macro-with-backquote 3)