2 ;V Just make the package exist here, V
3 ;V define its guts later in globals.lisp V
6 (defpackage :lineal.overload
8 (:export
*accep-table
* mtrix tuple
9 make-tuple tuple-dim tuple-elems
10 make-mtrix mtrix-dimdom mtrix-dimcodom mtrix-elems
12 addn subtrn multn divisn exptn
)
41 (in-package :lineal.overload
)
43 ;;; Multiplicative Inverse
44 (defgeneric over-multv-inverse
(a))
45 ;;; Concatenate Horizontally
46 (defgeneric cat2
(term1 term2
))
47 ;;; Concatenate Vertically (or vector-wise)
48 (defgeneric vcat2
(a b
))
50 (defgeneric over-crop
(a b
))
51 (defgeneric over-vcrop
(a b
))
53 (defgeneric over-transpose
(a))
54 (defmethod over-transpose (a)
56 "You can only tranpose vectors and matrices."))
59 ;;; Standard operations.
60 (defgeneric add2n
(a b
))
61 (defgeneric subtr2n
(a b
))
62 (defgeneric mult2n
(a b
))
63 (defgeneric divis2n
(a b
))
64 (defgeneric expt2n
(a b
))
66 (defun addn (&rest elems
)
67 (reduce #'add2n elems
))
69 (defun subtrn (&rest elems
)
71 (reduce #'subtr2n elems
)
72 ;V If only one element, follow V
73 ;V lisp style by negating it. V
74 (mult2n -
1 (car elems
))))
76 (defun multn (&rest elems
)
77 (reduce #'mult2n elems
))
79 (defun divisn (&rest elems
)
81 (reduce #'divis2n elems
)
82 (over-multv-inverse (car elems
))))
84 (defun exptn (&rest elems
)
85 (reduce #'expt2n elems
))