Functional programming CLISP中的反向列表
我正试图用LISP编写自己的函数来反转列表。问题是输入 (回复’(23(45(6))) 我的代码如下所示: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)
(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
列表
。您还可以将函数命名为树反转
相关:,相关:,