3

我知道这实现起来很简单,但我希望 Racket 能够兑现它的“包括电池”的承诺。我正在寻找一个像这样工作的函数:

> (define (between lst item spot)
    (append (take lst spot)
            (cons item (drop lst spot))))
> (between '(1 3) 2 1)
'(1 2 3)

Racket 是否包含任何此类内置功能?

4

2 回答 2

9

这是基于 Stephen Chang 评论的实现(我稍微交换了参数顺序并重命名了函数):

(define (insert-at lst pos x)
  (define-values (before after) (split-at lst pos))
  (append before (cons x after)))
于 2013-05-19T03:29:22.213 回答
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)))))))
于 2013-05-19T02:39:02.397 回答