S-99-21 Insert an element at a given position into a list.
Example:
(insert-at 'alfa '(a b c d) 2) ; => (a alfa b c d)
Solution:
(define (insert-at x xs n)
(if (< n 0)
(reverse (insert-at x (reverse xs) (- n)))
(cond ((zero? n) xs)
((= n 1) (cons x xs))
((null? xs) '())
(else
(cons (car xs) (insert-at x (cdr xs) (- n 1)))))))
Testing:
> (insert-at 'alfa '(a b c d) 2) (a alfa b c d) > (insert-at 'alfa '(a b c d) -2) (a b c alfa d) > (insert-at 'alfa '(a b c d) 0) (a b c d) > (insert-at 'alfa '() 2) () > (insert-at 'alfa '() 1) (alfa) > (insert-at 'alfa '(a b c d) 1000) (a b c d)