# OBJECT an example object -- a 2D point
[hear] (define point
(lambda (x y)
(reflective
(lambda (self msg)
(cond ((= (msg) x) (x))
((= (msg) y) (y))
((= (msg) point) (self))
((= (msg) +)
(lambda ((p point))
(point (+ (x) (p x))
(+ (y) (p y)))))
((= (msg) =)
(lambda ((p point))
(and (= (x) (p x))
(= (y) (p y)))))
0)))));
[hear] (define point1 (point 1 11));
[hear] (define point2 (point 2 22));
[hear] (= 1 (point1 x));
[hear] (= 22 (point2 y));
[hear] (= 11 ((point 11 12) x));
[hear] (= 11 (((point 11 12) point) x));
[hear] (= 16 (((point 16 17) point) x));
[hear] (= 33 (point1 + (point2) y));
[hear] (point1 + (point2) = (point 3 33));
[hear] (point2 + (point1) = (point 3 33));
[hear] ((point 100 200) + (point 200 100) = (point 300 300));
[hear] (instanceof point (point1));
[hear] (not (instanceof int (point1)));
[hear] (instanceof int 5);
[hear] (not (instanceof point 5));