我可以使用什么样的Racket函数将值插入列表中的任意位置?

时间:2013-05-19 01:44:02

标签: lisp scheme racket

我知道实施这一点很简单,但我希望Racket能够实现它所包含的电池"诺言。我正在寻找一个像这样的函数:

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

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

2 个答案:

答案 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)))))))