Scheme どう書く?的
整列済みの number のリストがある。
'(1 3 4 5 6 12 13 15)
このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。
最初の例のリストであれば以下のようになる。
'(1 (3 . 6) (12 . 13) 15)
このようなリストの変換をするコードを書きたい。
こんな感じか。
(define (compact-number-list ls) (define (loop start n ls ns) (cond [(or (null? ls) (not (= (+ n 1) (car ls)))) (rec ls (acons start n ns))] [else (loop start (+ n 1) (cdr ls) ns)])) (define (rec ls ns) (cond [(or (null? ls) (null? (cdr ls))) (reverse (append ls ns))] [(= (cadr ls) (+ (car ls) 1)) (loop (car ls) (cadr ls) (cddr ls) ns)] [else (rec (cdr ls) (cons (car ls) ns))])) (rec ls '()))
うん、まぁ何の面白みもないコードですいませんが。