diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-08-02 20:19:42 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-08-02 22:05:29 +0200 |
commit | dda8b325b562d957250c05a26a702f4536d5601e (patch) | |
tree | a72b4fc9b4bfa0fc4d5f7e6823bd0d37da6b2938 /v3.scm | |
parent | Update all dependencies to work. (diff) | |
download | texttv-master.tar.gz texttv-master.tar.xz |
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 )) |