从球拍列表中删除 n 个元素

Removing n number of elements from a list in racket

我正在尝试创建一个过程以从索引 i 开始的列表中删除 n 个元素,到目前为止,这是我得到的:

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

我可能遗漏了一个条件,但我有点困惑。

您必须 check/decrement in 分开

(define (remove L i n)
  (cond ((null? L)
         empty)
        ((> i 0)
         (cons (car L) (remove (cdr L) (sub1 i) n)))
        ((> n 0)
         (remove (cdr L) i (sub1 n)))
        (else
         L)))

(remove '(0 1 2 3 4 5 6) 3 2)
;; => '(0 1 2 5 6)

(remove '(0 1 2 3 4 5 6) 5 100)
;; => '(0 1 2 3 4)

(remove '(0 1 2 3 4 5 6) 100 200)
;; => '(0 1 2 3 4 5 6)

(remove '() 0 10)
;; => '()