ベクターに変換すれば多少はいいのだろうか?
(define (swap m n ls)
(let* ((v (list->vector ls))
(vm (vector-ref v (- m 1)))
(vn (vector-ref v (- n 1))))
(vector-set! v (- n 1) vm)
(vector-set! v (- m 1) vn)
(vector->list v)))

Schemeでスマンです。