在LISP中使用dolist反转列表

时间:2013-12-12 23:14:00

标签: lisp common-lisp

我试图反转一个列表,我不能使用“nreverse”函数

我试试:

(defun dolist-reverse (l)
  (let ((new-list (make-list (length l))))
    (dolist (x l new-list)
      (setf new-list (cons x new-list)))))

但结果是:

  

CL-使用者> (dolist-reverse'(1 2 3))

     

(3 2 1 NIL NIL NIL)

我该怎么办? (我需要使用dolist)

编辑:

最后解决我的问题:

(defun dolist-reverse (l)
  (let ((new-list))
    (dolist (x l new-list)
      (setf new-list (cons x new-list)))))

2 个答案:

答案 0 :(得分:3)

CL-USER 11 > (defun dolist-reverse (list &aux (reverse-list nil))
               (dolist (element list reverse-list)
                 (push element reverse-list)))
DOLIST-REVERSE

CL-USER 12 > (dolist-reverse '(1 2 3))
(3 2 1)

答案 1 :(得分:-1)

这个做同样的事情,而不改变程序的参数;

 (defun my-reverse (l)
     (if (null l) nil
       (append
         (my-reverse (cdr l))
         (list (car l)))))