SICP 2.61

データの表現方法は色々だけど、手続きによって抽象化してやれば外からは同じように使える。ただし、データの表現方法に応じて計算量に大きな違いが出たりするので工夫のしどころだよ、というわけだ。

(define (adjoin-set x set)
  (cond ((null? set) (list x))
        ((= x (car set)) set)
        ((< x (car set)) (cons x set))
        (else (cons (car set) (adjoin-set x (cdr set))))))

; test
(adjoin-set 4 '(1 3 5 7 9))
(adjoin-set 3 '(1 3 5 7 9))
(adjoin-set 11 '(1 3 5 7 9))