我正在编写一个程序,在方案(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)
答案 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步骤的项目。