blob: b2bc523137f64a95dfd7e7ca96833f22fd4ef27b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 ))
|