It is easy. Override the procedures to have the first argument of the type of the object being created:
(define +type-pair+ 'pair)
(define +type-number+ 'number)
(define (cons a d)
(lambda (m) (m +type-pair+ a d)))
(define (type x)
(x (lambda (t . rest) t)))
(define (pair? c)
(eq? (type c) +type-pair+))
(define (car c)
(if (pair? c)
(c (lambda (t a d) a))
(error "Argument is not pair!")))
(define (cdr c)
(if (pair? c)
(c (lambda (t a d) d))
(error "Argument is not pair!")))
(define (number? c)
(if (type c) +type-number+))
, , , ( x), , , , . , , , SICP , , . Arc , . Arc, , .