使用引号的奇怪结果,递归地反转包含所有子列表的列表
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))
我编写了一个代码来递归地反转列表及其所有子列表:
(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))