我试图用LISP编写自己的函数来反转list问题是输入
(回复'(23(45(6)))
我的代码如下:
(defun revert (l)
(if (null l)
nil
(append (revert (cdr l)) (list (car l)))))
它又回来了
((4 5(6))3 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)
在一般的Lisp中,名字最好用全称,所以最好用
l
list
来命名您还可以将函数命名为类似于tree-reverse
。