我必须反转简单(单维)列表的元素。我知道有一个内置的反向函数,但我不能用它来做这个。
这是我的尝试:
(defun LISTREVERSE (LISTR)
(cond
((< (length LISTR) 2) LISTR) ; listr is 1 atom or smaller
(t (cons (LISTREVERSE (cdr LISTR)) (car LISTR))) ; move first to the end
)
)
输出非常接近,但是是错误的。
[88]> (LISTREVERSE '(0 1 2 3))
((((3) . 2) . 1) . 0)
所以我尝试使用append
代替cons
:
(t (append (LISTREVERSE (cdr LISTR)) (car LISTR)))
但得到这个错误:
*** - APPEND: A proper list must not end with 2
有什么帮助吗?
我可以给你一些建议,因为这看起来像家庭作业:
- 递归的基本情况是列表为空 (null) 时,并且not当列表中的元素少于两个时
- 考虑定义一个带有额外参数的辅助函数,即在空列表中初始化的“累加器”。对于原始列表中的每个元素,
cons
它位于累加器的头部。当输入列表为空时,返回累加器
顺便说一句,上述解决方案是尾递归的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)