我正在尝试创建一个从索引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))))
我可能在那里错过了一个条件,但我很困惑。
答案 0 :(得分:0)
您必须单独检查/减少i
和n
(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)
;; => '()