【发布时间】:2017-05-29 17:34:50
【问题描述】:
我想在 Lisp 中写一个深度反向函数,只依赖 Lisp 提供的原始反向函数,以及其他一些常见的东西。我认为使用地图更容易做到这一点,例如:
(defun deep-reverse (list)
(if (listp list)
(mapcar #'deep-reverse
(reverse list))
list))
但是如果不使用这些地图或其他结构呢?仅仅依靠if、reverse、append、null、nil、listp、atom、cons、car、cdr等东西。基本的东西。我可以做一个一级反向,像这样:
(defun reverse (list)
(if (null list)
'nil
(append (reverse (cdr list))
(cons (car list) 'nil))))
但是我怎样才能实现这样的深度反向呢?我所说的深度反向是,如果函数的输入是((1 2 3) (4 5 6)),那么输出应该是((6 5 4) (3 2 1))。
【问题讨论】:
标签: lisp common-lisp