Functional programming CLISP中的反向列表

Functional programming CLISP中的反向列表,functional-programming,lisp,common-lisp,Functional Programming,Lisp,Common Lisp,我正试图用LISP编写自己的函数来反转列表。问题是输入 (回复’(23(45(6))) 我的代码如下所示: (defun revert (l) (if (null l) nil (append (revert (cdr l)) (list (car l))))) 它回来了 ((4 5(6))3 2) 与此相反: ((6)54)32) 如何使其正常工作?既然您也想反转子列表,您必须在汽车上使用还原以及CDR: (defun revert (l) (if (null l)

我正试图用LISP编写自己的函数来反转列表。问题是输入

(回复’(23(45(6)))

我的代码如下所示:

(defun revert (l)
  (if (null l)
    nil
    (append (revert (cdr l)) (list (car l)))))
它回来了

((4 5(6))3 2)

与此相反:

((6)54)32)


如何使其正常工作?

既然您也想反转子列表,您必须在
汽车上使用
还原
以及
CDR

(defun revert (l)
  (if (null l)
      nil
      (append (revert (cdr l))
              (list (revert (car l))))))
但是,这需要您处理
L
可能是atom的可能性,它应该按原样返回。由于
NIL
也是一个atom,因此您只需更改条件以检查
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
列表
。您还可以将函数命名为
tree reverse

,因为您也要反转子列表,因此必须在
汽车上使用
REVERT
以及
CDR

(defun revert (l)
  (if (null l)
      nil
      (append (revert (cdr l))
              (list (revert (car l))))))
但是,这需要您处理
L
可能是atom的可能性,它应该按原样返回。由于
NIL
也是一个atom,因此您只需更改条件以检查
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
列表
。您还可以将函数命名为
树反转

相关:,相关:,