删除列表的n个元素

时间:2017-11-01 00:14:50

标签: scheme racket r5rs

我正在编写一个程序,在方案(R5RS)中执行一些列表操作。 我正在尝试创建一个过程,该过程将删除列表n的索引i处的L项。 我编写了除n中的第一个L项以外的所有项以及仅返回n的第一个L元素的过程的程序。 我能够编写一个删除ith L项的过程,但无法弄清楚如何删除n项。这是我的删除程序:

(define (remove L i)
  (cond ((null? L)'())
        ((= i 0) (cdr L))
        (else (cons (car L) (remove (cdr L) (- i 1))))))

`(remove '(1 2 3 4 5) 2)` -> (1 2 4 5)

我正在努力想出一个能够执行以下操作的程序(remove L i n)

(remove '(1 2 3 4 5) 2 2) -> (1 2 5)

1 个答案:

答案 0 :(得分:1)

(define (remove L i count)
  (append
   (take L i)
   (if (< (length (list-tail L i)) count)
       (list-tail L i)
       (list-tail L (+ i count)))))

这个功能的含义应该是这样的: 1.先拿i个项目。 2.从i,检查是否有足够的计数项目    如果有,忽略它们,接受其余的。    如果没有,请休息一下。 附加1和2步骤的项目。