Lisp程序,用于创建每个增量的子列表

jos*_*ess 3 lisp syntax list common-lisp sublist

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

(1 2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)

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

(1 (2 (3 (4 (5 (6))))))
Run Code Online (Sandbox Code Playgroud)

.到目前为止,我有:

(defun INCREMENT (L) (unless (endp L) (cons (list (first L)) (INC (rest L)))))
Run Code Online (Sandbox Code Playgroud)

但这一切都将归来

((1) (2) (3) (4))
Run Code Online (Sandbox Code Playgroud)

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

Ósc*_*pez 5

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

(defun INCREMENT (L)
  (cond ((endp L) '())
        ((endp (rest L)) (list (first L)))
        (t (cons (first L)
                 (list (INCREMENT (rest L)))))))
Run Code Online (Sandbox Code Playgroud)