gpt4 book ai didi

lisp - CLISP - 反转一个简单列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:36 24 4
gpt4 key购买 nike

我必须反转一个简单(一维)列表的元素。我知道有一个内置的反向功能,但我不能为此使用它。

这是我的尝试:

(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) 时,不是当列表中的元素少于两个时
  • 考虑定义一个带有额外参数的辅助函数,一个在空列表中初始化的“累加器”。对于原始列表中的每个元素,cons 它位于累加器的头部。当输入列表为空时,返回累加器

顺便说一下,上面的解决方案是尾递归的。

关于lisp - CLISP - 反转一个简单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com