diff --git a/step_2.rkt b/step_2.rkt new file mode 100644 index 0000000000000000000000000000000000000000..adbab249741931324f4a48f55916492b97ea6fe0 --- /dev/null +++ b/step_2.rkt @@ -0,0 +1,44 @@ +#lang r5rs + +(define (point x y) + (define (setx value) + (set! x value)) + (define (add p) + (point (+ x (p 'getx)) (+ y (p 'gety)))) + (define (self m) + (cond ((eq? m 'getx) x) + ((eq? m 'gety) y) + ((eq? m 'type) 'point) + ((eq? m 'info) (list (self 'type) (self 'getx) (self 'gety)) ) + ((eq? m 'setx!) setx ) + ((eq? m 'add) add) + (else (display "Message not understood")))) + self) + +(define (send p m . args) + (if (procedure? p) + + (cond + ((null? args) (p m)) + ; Checker length args + ;((eq? m 'add) (p 'add + (else ((p m) (car args) ) ) + ) + (display "Inappropriate receiver object") ) + ) + + + +( define p1 ( point 1 2 ) ) +( define p2 ( point 3 4 ) ) +(display ( send p1 'getx )) ; 1 +(display ( send p1 'gety )) ; 2 +(display ( send p2 'getx )) ; 3 +(display ( send p2 'gety )) ; 4 +;(display ( send p1 'add p2)) ;(4 6) +(define p (send p1 'add p2)) +(display ( send p 'info )) ; ( p o i n t 4 6) + +(send p1 'setx! 5) +(display (send p1 'getx )) ; r e t u r n s 5 +(display (send 'add 'getx)) \ No newline at end of file