在Scheme中列表的任意位置插入

在Scheme中列表的任意位置插入,scheme,guile,Scheme,Guile,我随身携带一份清单,例如:(bdf) 我想在列表中的任意位置插入一个元素。例如,如果元素是A,我想在B之前插入,如果元素是C,我想在B之后但在D之前插入 有没有办法在Scheme中的列表中的任意位置插入元素?很容易实现以下功能: (define (insert-at new k lst) (cond ((null? lst) (list new)) ((zero? k) (cons new lst)) (else

我随身携带一份清单,例如:
(bdf)

我想在列表中的任意位置插入一个元素。例如,如果元素是A,我想在B之前插入,如果元素是C,我想在B之后但在D之前插入


有没有办法在Scheme中的列表中的任意位置插入元素?

很容易实现以下功能:

(define (insert-at new k lst)
  (cond ((null? lst)
         (list new))
        ((zero? k)
         (cons new lst))
        (else
         (cons (car lst)
               (insert-at new (sub1 k) (cdr lst))))))
例如:

(insert-at 'B 1 '(A))
=> '(A B)

(insert-at 'A 0 '(B D F))
=> '(A B D F)

(insert-at 'C 2 '(A B D F))
=> '(A B C D F)