This link has been bookmarked by 12 people . It was first bookmarked on 16 Sep 2006, by Navneet Kumar.
-
06 Aug 15
-
18 Nov 14
-
(define (make-point-2D x y) (define (get-x) x) (define (get-y) y) (define (set-x! new-x) (set! x new-x)) (define (set-y! new-y) (set! y new-y)) (lambda (selector . args) ; a dispatcher (case selector ((get-x) (apply get-x args)) ((get-y) (apply get-y args)) ((set-x!) (apply set-x! args)) ((set-y!) (apply set-y! args)) (else (error "don't understand " selector))))) (define (make-point-3D x y z) ; that is, point-3D _inherits_ from point-2D (let ((parent (make-point-2D x y))) (define (get-z) z) (define (set-z! new-z) (set! z new-z)) (lambda (selector . args) (case selector ((get-z) (apply get-z args)) ((set-z!) (apply set-z! args)) ; delegate everything else to the parent (else (apply parent (cons selector args))))))) (define a-point-2D (make-point-2D 5 6)) (define a-point-3D (make-point-3D 7 8 9)) (a-point-2D 'get-x) => 5 (a-point-3D 'get-x) => 7 (a-point-2D 'set-y! 10) (a-point-3D 'set-z! 11) (a-point-2D 'get-y) => 10 (a-point-3D 'get-z) => 11 (define b-point-2D (make-point-2D 5 10)) ; a-point-2D and b-point-2D currently have the same state (equal? (list (a-point-2D 'get-x) (a-point-2D 'get-y)) (list (b-point-2D 'get-x) (b-point-2D 'get-y))) ==> #t ; but they are different objects (eq? a-point-2D b-point-2D) ==> #f
-
-
25 Sep 12
-
An object has state, behavior, and identity;
-
-
11 Mar 10
-
22 Feb 09
-
14 Oct 07
-
23 Apr 07
-
22 Apr 07
-
16 Sep 06
Would you like to comment?
Join Diigo for a free account, or sign in if you are already a member.