Changeset 1063
- Timestamp:
- 2015-06-10T09:08:15-07:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/.junk/poly-eval.lisp
r1062 r1063 163 163 164 164 165 (defun parse-string-to-alist (str vars) 166 "Parse string STR and return a polynomial as a sorted association 167 list of pairs (MONOM . COEFFICIENT). For example: 168 (parse-string-to-alist \"[x^2-y^2+(-4/3)*u^2*w^3-5,y]\" '(x y u w)) 169 ([ (((0 0 2 3) . -4/3) ((0 2 0 0) . -1) ((2 0 0 0) . 1) 170 ((0 0 0 0) . -5)) 171 (((0 1 0 0) . 1))) 172 The functions PARSE-TO-SORTED-ALIST and PARSE-STRING-TO-SORTED-ALIST 173 sort terms by the predicate defined in the ORDER package." 174 (with-input-from-string (stream str) 175 (parse-to-alist vars stream))) 176 177 178 (defun parse-to-sorted-alist (vars &optional (order #'lex>) (stream t)) 179 "Parses streasm STREAM and returns a polynomial represented as 180 a sorted alist. For example: 181 (WITH-INPUT-FROM-STRING (S \"X^2-Y^2+(-4/3)*U^2*W^3-5\") 182 (PARSE-TO-SORTED-ALIST '(X Y U W) S)) 183 returns 184 (((2 0 0 0) . 1) ((0 2 0 0) . -1) ((0 0 2 3) . -4/3) ((0 0 0 0) . -5)) 185 and 186 (WITH-INPUT-FROM-STRING (S \"X^2-Y^2+(-4/3)*U^2*W^3-5\") 187 (PARSE-TO-SORTED-ALIST '(X Y U W) T #'GRLEX>) S) 188 returns 189 (((0 0 2 3) . -4/3) ((2 0 0 0) . 1) ((0 2 0 0) . -1) ((0 0 0 0) . -5))" 190 (sort-poly (parse-to-alist vars stream) order)) 191 192 (defun parse-string-to-sorted-alist (str vars &optional (order #'lex>)) 193 "Parse a string to a sorted alist form, the internal representation 194 of polynomials used by our system." 195 (with-input-from-string (stream str) 196 (parse-to-sorted-alist vars order stream))) 197 198 (defun sort-poly-1 (p order) 199 "Sort the terms of a single polynomial P using an admissible monomial order ORDER. 200 Returns the sorted polynomial. Destructively modifies P." 201 (sort p order :key #'first)) 202 203 ;; Sort a polynomial or polynomial list 204 (defun sort-poly (poly-or-poly-list &optional (order #'lex>)) 205 "Sort POLY-OR-POLY-LIST, which could be either a single polynomial 206 or a list of polynomials in internal alist representation, using 207 admissible monomial order ORDER. Each polynomial is sorted using 208 SORT-POLY-1." 209 (cond 210 ((eql poly-or-poly-list :syntax-error) nil) 211 ((null poly-or-poly-list) nil) 212 ((eql (car poly-or-poly-list) '[) 213 (cons '[ (mapcar #'(lambda (p) (sort-poly-1 p order)) 214 (rest poly-or-poly-list)))) 215 (t (sort-poly-1 poly-or-poly-list order)))) 216
Note:
See TracChangeset
for help on using the changeset viewer.