我正在尝试编写自己的函数来反转LISP中的列表。问题是输入
(还原'(2 3(4 5(6))))
我的代码如下所示:
(defun revert (l)
(if (null l)
nil
(append (revert (cdr l)) (list (car l)))))
返回
((4 5(6))3 2)
而不是:
<(>((6)5 4)3 2)
如何修复它才能正常工作?
答案 0 :(得分:2)
由于您也要反转子列表,因此必须使用REVERT
上的CAR
以及CDR
:
(defun revert (l)
(if (null l)
nil
(append (revert (cdr l))
(list (revert (car l))))))
然而,这要求您处理L
可能是原子的可能性,原子应该按原样返回。由于NIL
也是一个原子,因此您只需更改条件即可检查ATOM
而不是NULL
。
(defun revert (list)
(if (atom list)
list
(append (revert (cdr list))
(list (revert (car list))))))
(revert '(2 3 (4 5 (6))))
;=> (((6) 5 4) 3 2)
在Common Lisp中,首选使用完整单词作为名称,因此最好将l
list
命名为。您还可以将该函数命名为tree-reverse
。