list - 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 的语法。有人可以帮我解决这个问题吗?
解决方案
这是一个可能的解决方案,诀窍是在调用递归list
之前使用。还要注意我们必须处理基本情况:当列表为空且只剩下一个元素时:
(defun INCREMENT (L)
(cond ((endp L) '())
((endp (rest L)) (list (first L)))
(t (cons (first L)
(list (INCREMENT (rest L)))))))
推荐阅读
- javascript - 样式更改后Javascript继续动画计时器
- vba - 如何不重复日历约会?
- .net - ASP.NET Core 中返回 IEnumerable 的单元测试控制器逻辑
在 JsonResult - mysql - 左连接mysql中子查询的结果
- javascript - TypeError:无法读取未定义的属性“行”
- java - 模拟递归类
- javascript - 创建一个临时文件并在用户计算机上的不同应用程序中打开它
- node.js - Postgresql - 内部列标题显示为“?column?”
- android - Flutter:从网络错误导入图像 URL
- ansible - 安西布尔。更新 hostvars 变量