- Timestamp:
- 2015-06-10T09:01:41-07:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/.junk/poly-eval.lisp
r1057 r1060 1 (defun alist-form (plist vars) 2 "Translates an expression PLIST, which should be a list of polynomials 3 in variables VARS, to an alist representation of a polynomial. 4 It returns the alist. See also PARSE-TO-ALIST." 5 (cond 6 ((endp plist) nil) 7 ((eql (first plist) '[) 8 (cons '[ (mapcar #'(lambda (x) (alist-form x vars)) (rest plist)))) 9 (t 10 (assert (eql (car plist) '+)) 11 (alist-form-1 (rest plist) vars)))) 12 13 (defun alist-form-1 (p vars 14 &aux (ht (make-hash-table 15 :test #'equal :size 16)) 16 stack) 17 (dolist (term p) 18 (assert (eql (car term) '*)) 19 (incf (gethash (powers (cddr term) vars) ht 0) (second term))) 20 (maphash #'(lambda (key value) (unless (zerop value) 21 (push (cons key value) stack))) ht) 22 stack) 23 24 (defun powers (monom vars 25 &aux (tab (pairlis vars (make-list (length vars) 26 :initial-element 0)))) 27 (dolist (e monom (mapcar #'(lambda (v) (cdr (assoc v tab))) vars)) 28 (assert (equal (first e) '^)) 29 (assert (integerp (third e))) 30 (assert (= (length e) 3)) 31 (let ((x (assoc (second e) tab))) 32 (if (null x) (error "Variable ~a not in the list of variables." 33 (second e)) 34 (incf (cdr x) (third e)))))) 35 36 37 1 38 (defun convert-number (number-or-poly n) 2 39 "Returns NUMBER-OR-POLY, if it is a polynomial. If it is a number,
Note:
See TracChangeset
for help on using the changeset viewer.