使用引号的奇怪结果,递归地反转包含所有子列表的列表

Strange results using quote, reversing a list with all sublists recursively

我编写了一个代码来递归地反转列表及其所有子列表:

(defun rev1( list final )
    ( if ( eq list () )
       final
       ( if ( atom ( car list ) )
           ( rev1( cdr list ) ( cons ( car list ) final ) )
           ( rev1( cdr list ) ( cons ( rev1( car list ) () ) final ) ))))

(defun rev(list)
   ( rev1 list () ) )

问题是,如果我用 ( rev '( 1 2 '( 3 2 1 ) 3 ) ) 调用函数,预期输出应该是 (3 (1 2 3) 2 1) 但我得到的不是这个: (3 ((1 2 3) QUOTE) 2 1) 我不明白为什么。谁能告诉我问题出在哪里?

' 字符是一个 reader 宏,即 Lisp reader 会将其扩展为对 quote. The CLHS entry on quote 的调用,给出以下评估示例:

'a  => A
''a => (QUOTE A) 

因此:

(rev (list 'a))  =>     (A)
(rev (list ''a)) =>     ((A QUOTE))
(rev ''a)        =>     (A QUOTE)
(rev '(a))       =>     (A)
(rev '('a))      =>     ((A QUOTE))