我知道这实现起来很简单,但我希望 Racket 能够兑现它的“包括电池”的承诺。我正在寻找一个像这样工作的函数:
> (define (between lst item spot)
(append (take lst spot)
(cons item (drop lst spot))))
> (between '(1 3) 2 1)
'(1 2 3)
Racket 是否包含任何此类内置功能?
这是基于 Stephen Chang 评论的实现(我稍微交换了参数顺序并重命名了函数):
(define (insert-at lst pos x)
(define-values (before after) (split-at lst pos))
(append before (cons x after)))
不,它没有;但你的是一个很好的实现!
如果你必须实现它......
(define (between list item spot)
(if (zero? spot)
(cons item list)
(let ((rslt list))
(let looking ((list list) (indx (- spot 1)))
(if (zero? indx)
(begin (set-cdr! list (cons item (cdr list)))
rslt)
(looking (cdr list) (- indx 1)))))))