Changeset 4434 for branches/f4grobner/fast-add.lisp
- Timestamp:
- 2016-06-10T09:50:24-07:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/fast-add.lisp
r4431 r4434 1 (load "boot") 2 3 (use-package :polynomial) 4 (use-package :monom) 5 6 ;;(shadow '(fast-add) "POLYNOMIAL") 1 (in-package :polynomial) 7 2 8 3 ;; Getter/setter of leading coefficient … … 10 5 (defun (setf lc) (new-value x) (setf (term-coeff (car x)) new-value)) 11 6 12 (defvar order-fn #'lex>) 13 (defvar add-fn #'add-to) 7 (defun fast-add (p q order-fn add-fn) 8 (cond 9 ((endp p) p) 10 ((endp q) q) 11 (t 12 (multiple-value-bind 13 (greater-p equal-p) 14 (funcall order-fn (car p) (car q)) 15 (cond 16 (greater-p ; (> (cadr h) (car q)) 17 (cons (car p) (fast-add (cdr p) q order-fn add-fn)) 18 ) 19 (equal-p ; (= (cadr h)) (car q)) 20 (let ((s (funcall add-fn (lc p) (lc q)))) 21 (cond 22 ((universal-zerop s) 23 (fast-add (cdr p) (cdr q) order-fn add-fn)) 24 (t 25 ;; Adjust the lc of p 26 (setf (lc p) s) 27 (cons (car p) (fast-add (cdr p) (cdr q) order-fn add-fn)) 28 )))) 29 (t ;(< (cadr h) (car q)) 30 (cons (car q) (fast-add p (cdr q) order-fn add-fn)) 31 )))))) 14 32 15 (defun fast-add-helper (p q)16 (do ((h p))17 ((endp q) p)18 (multiple-value-bind19 (greater-p equal-p)20 (funcall order-fn (car h) (car q))21 (cond22 (greater-p ; (> (lm h) (lm q))23 (setf h (cdr h))24 )25 (equal-p ; (= (lm h) (lm q))26 (let ((s (funcall add-fn (lc h) (lc q))))27 (cond28 ((universal-zerop s)29 (cond30 (setf h (cdr h)31 q (cdr q))))32 (t33 ;; Adjust the lc of p34 (setf (lc h) s)35 (setf h (cdr h)36 q (cdr q))))))37 33 38 (t ;(< (lm h) (lm q)) 39 34 40 35 41 36
Note:
See TracChangeset
for help on using the changeset viewer.