【问题标题】:Reverse list in CLISPCLISP 中的反向列表
【发布时间】:2016-08-22 02:25:28
【问题描述】:

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

(revert '(2 3 (4 5 (6))))

我的代码如下所示:

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

返回

((4 5 (6)) 3 2)

而不是这个:

(((6) 5 4) 3 2)

如何修复它以使其正常工作?

【问题讨论】:

标签: functional-programming lisp common-lisp


【解决方案1】:

由于您还想反转子列表,因此您必须在 CARCDR 上使用 REVERT

(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)

在 Common Lisp 中,最好使用完整的单词作为名称,因此最好命名为 l list。您还可以将函数命名为 tree-reverse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2014-02-12
    • 2019-08-01
    相关资源
    最近更新 更多