(define (remove-at! ls n)
(cond ((null? ls) '())
((zero? n)
((lambda (tmp)
(set-car! ls (cadr ls))
(set-cdr! ls (cddr ls))
tmp)
(car ls)))
((= 1 n)
(if (null? (cdr ls))
'()
(if (null? (cddr ls))
((lambda (tmp)
(set-cdr! ls '())
tmp)
(cadr ls))
((lambda (a b c)
(set-car! b (car c))
(set-cdr! b (cdr c))
a)
(cadr ls)
(cdr ls)
(cddr ls)))))
(else (remove-at! (cdr ls) (- n 1)))))