list - 每次递增都会创建一个子列表的 Lisp 程序

标签 list syntax lisp common-lisp sublist

我目前正在开发一个程序,该程序通过列表递增并在每次递增时在列表中创建一个子列表。例如,如果我有一个

列表
(1 2 3 4 5 6)

.然后我想通过它递增并创建

(1 (2 (3 (4 (5 (6))))))

.到目前为止,我有:

(defun INCREMENT (L) (unless (endp L) (cons (list (first L)) (INC (rest L)))))

但是这一切都会返回

((1) (2) (3) (4))

我知道它只是增加了使用列表的次数以及遍历列表的元素,但我仍在学习 Lisp 的语法。有人可以帮我解决这个问题吗?

最佳答案

这是一个可能的解决方案,诀窍是使用 list before 调用递归。另请注意,我们必须处理基本情况:当列表为空且只剩下一个元素时:

(defun INCREMENT (L)
  (cond ((endp L) '())
        ((endp (rest L)) (list (first L)))
        (t (cons (first L)
                 (list (INCREMENT (rest L)))))))

关于list - 每次递增都会创建一个子列表的 Lisp 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486118/

相关文章:

r - 在 R 中组合两个列表

python - 拆分列表中的项目

c# - 有人可以用简单的英语或伪代码解释三元运算符吗?

c# - C# expression-bodied 成员的 method 属性

list - 在 Lisp 中获取具有特殊编号的列表

Lisp - 函数的函数调用接收的参数太少?

python - 如何使用一行代码创建一个包含列表的新文件?

php - 使用最新的 PHP 语法是否有任何性能提升?

lisp - Common Lisp 并行采样

javascript - 如何在 React 中显示 HTML 中对象的所有属性