; objpat1.scm - mzscheme objects example (based on code in "A Little Java, A Few Patterns")
(define point%
(class object% ()
(public
[distance-to-origin (void)]
[closer-to-origin (void)]
[name "point"])
(sequence (super-init)) ))
(define cartesian-point%
(class point% (_x _y)
(public
[x _x]
[y _y]
[to-string
(lambda ()
(string-append "new " name " (" (number->string x) "," (number->string y) ")"))]
)
(override
[name "cartesian-point"]
[distance-to-origin (lambda () (sqrt (+ (expt x 2) (expt y 2))))]
[closer-to-origin
(lambda (point)
(<= (distance-to-origin) (send point distance-to-origin) ))])
(sequence (super-init))
))
(define cartesian-point-1 (make-object cartesian-point% 2 3))
(define cartesian-point-2 (make-object cartesian-point% 1 1))
(define cartesian-point-3 (make-object cartesian-point% 3 3))
(send cartesian-point-1 to-string)
(send cartesian-point-1 distance-to-origin)
(send cartesian-point-1 closer-to-origin cartesian-point-2)
(send cartesian-point-1 closer-to-origin cartesian-point-3)
(define manhattan-point%
(class point% (_x _y)
(public
[x _x]
[y _y]
[to-string
(lambda ()
(string-append "new " name " (" (number->string x) "," (number->string y) ")"))]
)
(override
[name "manhattan-point"]
[distance-to-origin (lambda () (+ x y))]
[closer-to-origin
(lambda (point)
(<= (distance-to-origin) (send point distance-to-origin) ))])
(sequence (super-init))
))
(define manhattan-point-1 (make-object manhattan-point% 2 3))
(define manhattan-point-2 (make-object manhattan-point% 1 1))
(define manhattan-point-3 (make-object manhattan-point% 3 3))
(send manhattan-point-1 to-string)
(send manhattan-point-1 distance-to-origin)
(send manhattan-point-1 closer-to-origin manhattan-point-2)
(send manhattan-point-1 closer-to-origin manhattan-point-3)
Text file Source (historic): geocities.com/soho/square/3472
geocities.com/soho/squaregeocities.com/soho
(to report bad content: archivehelp @ gmail)
|
|
|
|
|