- Timestamp:
- 2015-09-05T09:24:58-07:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/monom.lisp
r3443 r3446 21 21 22 22 (defpackage "MONOM" 23 (:use :cl )23 (:use :cl :copy) 24 24 (:export "MONOM" 25 25 "EXPONENT" … … 158 158 159 159 160 (defmethod monom-sugar (m &aux (start 0) (end (monom-dimension m))) 161 "Return the sugar of a monomial M. Optinally, a range 162 of variables may be specified with arguments START and END." 163 (declare (type fixnum start end)) 164 (monom-total-degree m start end)) 165 166 (defmethod monom-multiply-by ((self monom) (other monom)) 167 (with-slots ((exponents1 exponents)) 168 self 169 (with-slots ((exponents2 exponents)) 170 other 171 (unless (= (length exponents1) (length exponents2)) 172 (error "Incompatible dimensions")) 173 (map-into exponents1 #'+ exponents1 exponents2))) 174 self) 175 176 (defmethod divide-by ((self monom) (other monom)) 177 (with-slots ((exponents1 exponents)) 178 self 179 (with-slots ((exponents2 exponents)) 180 other 181 (unless (= (length exponents1) (length exponents2)) 182 (error "divide-by: Incompatible dimensions.")) 183 (unless (every #'>= exponents1 exponents2) 184 (error "divide-by: Negative power would result.")) 185 (map-into exponents1 #'- exponents1 exponents2))) 186 self) 187 188 (defmethod monom-copy-instance ((object monom) &rest initargs &key &allow-other-keys) 189 "An :AROUNT method for COPY-INSTANCE. The primary method is a shallow copy, 190 while for monomials we typically need a fresh copy of the 191 exponents." 192 (declare (ignore object initargs)) 193 (let ((copy (call-next-method))) 194 (setf (monom-exponents copy) (copy-seq (monom-exponents copy))) 195 copy)) 160 (defmethod monom-sugar (m &optional start end) 161 (:documentation "Return the sugar of a monomial M. Optinally, a range 162 of variables may be specified with arguments START and END.") 163 (:method ((m monom) &optional (start 0) (end (monom-dimension m))) 164 (declare (type fixnum start end)) 165 (monom-total-degree m start end))) 166 167 (defgeneric monom-multiply-by (self other) 168 (:method ((self monom) (other monom)) 169 (with-slots ((exponents1 exponents)) 170 self 171 (with-slots ((exponents2 exponents)) 172 other 173 (unless (= (length exponents1) (length exponents2)) 174 (error "Incompatible dimensions")) 175 (map-into exponents1 #'+ exponents1 exponents2))) 176 self)) 177 178 (defgeneric divide-by (self other) 179 (:method ((self monom) (other monom)) 180 (with-slots ((exponents1 exponents)) 181 self 182 (with-slots ((exponents2 exponents)) 183 other 184 (unless (= (length exponents1) (length exponents2)) 185 (error "divide-by: Incompatible dimensions.")) 186 (unless (every #'>= exponents1 exponents2) 187 (error "divide-by: Negative power would result.")) 188 (map-into exponents1 #'- exponents1 exponents2))) 189 self)) 190 191 (defgeneric monom-copy-instance (object &rest initargs &key &allow-other-keys) 192 (:documentation "Returns a deep copy of OBJECT.") 193 (:method ((object monom) &rest initargs &key &allow-other-keys) 194 (declare (ignore object initargs)) 195 (let ((copy (call-next-method))) 196 (setf (monom-exponents copy) (copy-seq (monom-exponents copy))) 197 copy))) 196 198 197 199 (defmethod monom-multiply-2 ((m1 monom) (m2 monom))
Note:
See TracChangeset
for help on using the changeset viewer.