我想在Lisp中编写一个深度反向函数,只依赖于Lisp提供的原始反向函数,以及其他一些常见的东西。我认为使用地图更容易,例如:
(defun deep-reverse (list)
(if (listp list)
(mapcar #'deep-reverse
(reverse list))
list))
但是如果不使用这些地图或其他结构呢?只需依靠if
,reverse
,append
,null
,nil
,listp
,atom
等内容,{ {1}},cons
,car
等基本内容。我可以做一个级别的反向,像这样:
cdr
但是如何才能实现深度反转?深度反转的意思是,如果函数的输入为(defun reverse (list)
(if (null list)
'nil
(append (reverse (cdr list))
(cons (car list) 'nil))))
,则输出应为((1 2 3) (4 5 6))
。
答案 0 :(得分:6)