lisp里面反转一个列表里面的值?递归实现有问题啊


这个是我的代码:

(defun reverse-list2 (list)
  (if (null list) nil
    (cons (reverse-list2 (rest list)) (first list))))

我想反转,一个字符串列表。比如(reverse-list2 '("tar" "tip" "net"))
希望是("net" "tip" "tar") 这样。
结果是:(((NIL . "net") . "tip") . "tar")

然后我把代码这样:

(defun reverse-list2 (list)
  (if (null list) nil
    (cons (first list) (reverse-list2 (rest list)))))

然后就正常输出,顺序的列表了。
这个不理解啊。

commonlisp

Xx丶老寞 11 years, 3 months ago

可以参考我的

(defun my-reverse (lst)
  (labels ((nxt (lst rst)
                (if (null lst)
                  rst
                  (nxt (cdr lst) (cons (car lst) rst)))))
    (nxt lst nil)))

需要注意的是cons是把一个element给cons到一个list前面,你这里的用法是有问题的。

雪风·帕尼托妮 answered 11 years, 3 months ago

Your Answer