2 (defpackage :lineal.overload
4 (:export
*accep-table
* mtrix tuple
5 make-tuple tuple-dim tuple-elems
6 make-mtrix mtrix-dimdom mtrix-dimcodom mtrix-elems
8 addn subtrn multn divisn exptn
)
39 (in-package :lineal.overload
)
41 ;;; Multiplicative Inverse
42 (defgeneric over-multv-inverse
(a))
43 ;;; Concatenate Horizontally
44 (defgeneric cat2
(term1 term2
))
45 (defun cat-list (elems)
47 (reduce #'cat2 elems
:from-end t
)
49 ;;; Concatenate Vertically (or vector-wise)
50 (defgeneric vcat2
(a b
))
51 (defun vcat-list (elems)
53 (reduce #'vcat2 elems
:from-end t
)
56 (defgeneric over-crop
(a b
))
57 (defgeneric over-vcrop
(a b
))
59 (defgeneric over-transpose
(a))
60 (defmethod over-transpose (a)
62 "You can only tranpose vectors and matrices."))
65 ;;; Standard operations.
66 (defgeneric add2n
(a b
))
67 (defgeneric subtr2n
(a b
))
68 (defgeneric mult2n
(a b
))
69 (defgeneric divis2n
(a b
))
70 (defgeneric expt2n
(a b
))
72 (defun addn (&rest elems
)
73 (reduce #'add2n elems
))
75 (defun subtrn (&rest elems
)
77 (reduce #'subtr2n elems
)
78 ;V If only one element, follow V
79 ;V lisp style by negating it. V
80 (mult2n -
1 (car elems
))))
82 (defun multn (&rest elems
)
83 (reduce #'mult2n elems
))
85 (defun divisn (&rest elems
)
87 (reduce #'divis2n elems
)
88 (over-multv-inverse (car elems
))))
90 (defun exptn (&rest elems
)
91 (reduce #'expt2n elems
))