common-lisp - 常见的 Lisp 练习
问题描述
我一直在研究 common lisp,我已经阅读了示例和一些 pdf,我的教授布置了几个问题作为家庭作业,我只能使用 cons、append、list、equal、defun、car、cdr、cond,其中之一是删除特定数量的列表,例如(remove 2 '(1 2 3 4)
,结果:(1 3 4)
,我的代码:
(define (delete ele listx )
(cond ( null? listx)
'( ))
( ( equal? ele (car listx))
(delete ele (cdr listx)))
(else
(cons (car listx)
(delete ele (cdr listx))))))
这并不难,但现在我必须创建一个函数,像这样(delete'(a b c d e f) 2 5)
删除两个之间的元素 -> ; 在第三和第四之间删除(abef)
我还没有尝试过任何东西,只是研究并开始了一些代码,但不确定
( defun deletemiddle (index1 index2 listx)
(cond (( null listx) 0 )
(( = valor1 (1) )
((cons (car listx)
解决方案
- 如果起始索引为 0 或更少且结束索引大于 0,则删除元素并递归
- 否则 cons 元素并递归
当您递归时,列表的 cdr 和两个索引都减 1。
推荐阅读
- android - 我们可以按风格组织存储库并构建变体吗
- android - 从模型到存储库的 MVVM 返回值
- python - 清除包含“整数”和“字符串”的条目
- prepared-statement - Spring如何拦截和修改PreparedStatement的SQL?
- javascript - javascript中的参数声明预期错误
- mysql - 选择包含某些字符的MYSQL数据(单词)
- amazon-web-services - AWS SNS 消息发布成功状态
- c# - WPF ObservableCollection 未在功能区视图中更新
- vue.js - 如何使用 django 的 OR 和 AND 运算符创建正确的过滤器字符串?
- microsoft-graph-api - 从 webapp 创建呼叫时如何修复“不支持的 AAD 身份”?