Skip to content
Extraits de code Groupes Projets
Valider 9690a535 rédigé par Nicolas Verbois's avatar Nicolas Verbois
Parcourir les fichiers

Replace step_4.rkt

parent 77a894db
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
(define (object)
(define self_ref #f)
(define (set-self! ref) (set! self_ref ref))
(define (gettype) 'object)
(define (self m)
(cond ((eq? m 'type) (gettype))
((eq? m 'set-self!) set-self!)
(else (display "Message not understood"))))
self)
; COLOR-POINT
(define (color-point x y color)
(define mypoint (point x y))
(define self_ref #f)
(define super (point x y))
(define (set-self! ref)
(begin
(set! self_ref ref)
((super 'set-self!) ref)
))
(define (getcolor) color)
(define (gettype) 'color-point)
(define (getinfo) (list (self 'type) (mypoint 'getx) (mypoint 'gety) (self 'get-color)))
(define (getinfo) (append (super 'info) (list (self 'get-color))))
(define (add cp)
(color-point (+ (mypoint 'getx) (cp 'getx)) (+ (mypoint 'gety) (cp 'gety)) (getcolor)))
(color-point (+ (super 'getx) (cp 'getx)) (+ (super 'gety) (cp 'gety)) (getcolor)))
(define (self m)
(cond ((eq? m 'get-color) (getcolor))
((eq? m 'info) (getinfo))
((eq? m 'type) (gettype))
((eq? m 'add) add)
((eq? m 'set-self!) (display 'set_self_working))
(else (send mypoint m))))
((eq? m 'set-self!) set-self!)
(else (send super m))))
self)
;POINT
(define (point x y)
(define myobject (object))
(define self_ref #f)
(define (set-self! ref)
(begin
(set! self_ref ref)
((super 'set-self!) ref)
))
(define super (new object))
(define (getx) x )
(define (gety) y )
(define (gettype) 'point )
(define (getinfo)(list (self 'type) (self 'getx) (self 'gety)))
(define (getinfo)(list (self_ref 'type) (self 'getx) (self 'gety)))
(define (setx value)(set! x value))
(define (sety value)(set! y value))
(define (add p)
......@@ -40,15 +57,18 @@
((eq? m 'sety!) sety)
((eq? m 'add) add)
((eq? m 'child) (send self 'getcolor))
(else (send myobject m))))
((eq? m 'set-self!) set-self!)
(else (send super m))))
self)
(define (send p m . args)
(if (procedure? p)
(cond
((null? args) (p m))
(else ((p m) (car args)))
)
(else
((p m) (car args))
))
(display "Inappropriate receiver object") )
)
......@@ -56,9 +76,9 @@
(define (new object-class . class-args)
(cond ((eq? object-class color-point)
(if (eq? (length class-args) 3)
(let ((temp (color-point (car class-args) (cadr class-args) (caddr class-args))))
(let ((temp (color-point (car class-args) (cadr class-args) (caddr class-args)))); apply for arguments
(begin
(temp 'set-self!)
(send temp 'set-self! temp)
temp
)
)
......@@ -66,12 +86,22 @@
))
((eq? object-class point)
(if (eq? (length class-args) 2)
(point (car class-args) (cadr class-args))
(let ((temp (point (car class-args) (cadr class-args)))); apply for arguments
(begin
(send temp 'set-self! temp)
temp
)
)
(display "SON PERE")
))
((eq? object-class object)
(if (eq? (length class-args) 0)
(object)
(let ((temp (object))); apply for arguments
(begin
(send temp 'set-self! temp)
temp
)
)
(display "SON PERE")
))
)
......@@ -79,8 +109,8 @@
(eq? color-point point)
( define cp ( new color-point 5 6 'red ) )
( send cp 'type ) ; c o l o r - p o i n t
( send cp 'getx ) ; 5
( send cp 'gety ) ; 6
( send cp 'get-color ) ; red
( send cp 'info ) ; ( c o l o r - p o i n t 5 6 red )
( cp 'type ) ; c o l o r - p o i n t
( cp 'getx ) ; 5
( cp 'gety ) ; 6
( cp 'get-color ) ; red
( cp 'info ) ; ( c o l o r - p o i n t 5 6 red )
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter