Scheme どう書く?的

整列済みの number のリストがある。

'(1 3 4 5 6 12 13 15)

このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。

最初の例のリストであれば以下のようになる。

'(1 (3 . 6) (12 . 13) 15)

このようなリストの変換をするコードを書きたい。

書いてみました。こんな感じ。
う〜ん、なんかベタだなぁ。もっと、おぉ!というのが書きたい。
SRFIとか覚えないとダメかな・・・。

(define (compact-number-list lst)
  (define (skip-to-end l)
    (if (null? (cdr l))
        l
        (if (= (+ 1 (car l)) (cadr l))
            (skip-to-end (cdr l))
            l)))
  (if (null? lst)
      '()
      (let ([beg (car lst)]
            [r   (skip-to-end lst)])
        (cond [(null? r)       lst]
              [(= beg (car r)) (cons beg (compact-number-list (cdr r))) ]
              [else            (cons (cons beg (car r)) (compact-number-list (cdr r)))]))))