我试图用LISP编写自己的函数来反转list问题是输入
(回复'(23(45(6)))
我的代码如下:

(defun revert (l)
  (if (null l)
    nil
    (append (revert (cdr l)) (list (car l)))))

它又回来了
((4 5(6))3 2)
而不是这个:
((六)五十四)三十二)
我怎样才能使它正常工作?

最佳答案

因为您也要反转子列表,所以必须在REVERTCAR上使用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中,名字最好用全称,所以最好用llist来命名您还可以将函数命名为类似于tree-reverse

09-15 21:10