首页 > 解决方案 > 常见的 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)

标签: common-lisp

解决方案


  • 如果起始索引为 0 或更少且结束索引大于 0,则删除元素并递归
  • 否则 cons 元素并递归

当您递归时,列表的 cdr 和两个索引都减 1。


推荐阅读