リストから、n番目の要素を削除して、その削除した要素を返す関数を書きました。
まず下のような感じで書いたのですが、これだと、nが0の場合にエラーになります。

(define (remove-at! ls n)
  (let loop((prev '()) (rest ls) (count n))
    (if (zero? count)
      (begin
        (set-cdr! prev (cdr rest))
        (car rest))
      (loop rest (cdr rest) (- count 1)))))

それで、nが0の場合は別に処理を入れてみたのですが、破壊的操作で、リストの先頭を削除するのがどうしてもわかりません。
どう書けばいいでしょうか?

(define (remove-at! ls n)
 (cond
   ((null? ls) '())
   ((zero? n)
     (let
       ((tmp (car ls)))
       (set-cdr! ls (cdr ls)) ;; ここがダメ
       tmp))
   (else
     (let loop((prev '()) (rest ls) (count n))
       (if (zero? count)
         (begin
           (set-cdr! prev (cdr rest))
           (car rest))
         (loop rest (cdr rest) (- count 1)))))))