我目前正在开发一个程序,该程序在列表中递增,并在每次递增时在列表中创建一个子列表。例如,如果我有一个
列表(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))
我知道这只是增加使用list的次数以及遍历list的元素,但是我仍然在学习Lisp的语法。有人可以帮我吗?
答案 0 :(得分:5)
这是一个可能的解决方案,诀窍是在调用递归之前使用list
。还要注意,我们必须处理基本情况:当列表为空且仅剩一个元素时:
(defun INCREMENT (L)
(cond ((endp L) '())
((endp (rest L)) (list (first L)))
(t (cons (first L)
(list (INCREMENT (rest L)))))))