我知道实施这一点很简单,但我希望Racket能够实现它所包含的电池"诺言。我正在寻找一个像这样的函数:
> (define (between lst item spot)
(append (take lst spot)
(cons item (drop lst spot))))
> (between '(1 3) 2 1)
'(1 2 3)
Racket是否包含任何此类内置?
答案 0 :(得分:7)
这是一个基于Stephen Chang的评论的实现(我稍微交换了参数顺序并重命名了函数):
(define (insert-at lst pos x)
(define-values (before after) (split-at lst pos))
(append before (cons x after)))
答案 1 :(得分:1)
不,不;但你的是一个很好的实现!
如果你必须实施它......
(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)))))))