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

时间:2017-11-01 04:46:20

标签: scheme racket r5rs

我正在尝试创建一个从索引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))))

我可能在那里错过了一个条件,但我很困惑。

1 个答案:

答案 0 :(得分:0)

您必须单独检查/减少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)
;; => '()