diff options
Diffstat (limited to 'v3.scm')
-rw-r--r-- | v3.scm | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -0,0 +1,41 @@ +(define-module (v3) + :use-module (oop goops) + :re-export (+ - * abs) + :export (v3)) + +(define-class <v3> () + (x getter: x init-keyword: x:) + (y getter: y init-keyword: y:) + (z getter: z init-keyword: z:)) + +(define (v3 x y z) + (make <v3> x: x y: y z: z)) + +(define-generic +) +(define-generic -) +(define-generic *) +(define-generic abs) + +(define-method (+ (v <v3>) (u <v3>)) + (v3 (+ (x v) (x u)) + (+ (y v) (y u)) + (+ (z v) (z u)))) + +(define-method (- (v <v3>)) + (v3 (- (x v)) + (- (y v)) + (- (z v)))) + +(define-method (- (v <v3>) (u <v3>)) + (+ v (- u))) + +(define-method (* (v <v3>) (u <v3>)) + (+ (* (x v) (x u)) + (* (y v) (y u)) + (* (z v) (z u)))) + +(define-method (abs (v <v3>)) + (sqrt (* v v))) + +(define-method (write (v <v3>) port) + (write `(v3 ,(x v) ,(y v) ,(z v)) port )) |