首页 > 解决方案 > Lisp 程序为每个增量创建一个子列表

问题描述

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

(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 的语法。有人可以帮我解决这个问题吗?

标签: listsyntaxlispcommon-lispsublist

解决方案


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

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

推荐阅读