Changeset 4434 for branches/f4grobner/polynomial.lisp
- Timestamp:
- 2016-06-10T09:50:24-07:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/f4grobner/polynomial.lisp
r4432 r4434 301 301 |# 302 302 303 304 305 303 306 #| 304 307 (defun fast-add (p q order-fn add-fn) … … 337 340 (t 338 341 (rotatef (cdr q) r q))))))) 339 |# 340 342 |# 341 343 342 344 ;; Getter/setter of leading coefficient … … 345 347 346 348 (defun fast-add (p q order-fn add-fn) 347 ;; Requirement: (car p) > (car q) 348 ;; (consp (cdr p)) 349 (do ((h p)) 350 ((endp q) p) 351 (multiple-value-bind 352 (greater-p equal-p) 353 (funcall order-fn (cadr h) (car q)) 354 (cond 355 (greater-p ; (> (cadr h) (car q)) 356 (setf h (cdr h)) 357 ) 358 (equal-p ; (= (cadr h)) (car q)) 359 (let ((s (funcall add-fn (lc h) (lc q)))) 360 (cond 361 ((universal-zerop s) 362 (setf h (cdr h) 363 q (cdr q))) 364 (t 365 ;; Adjust the lc of p 366 (setf (lc h) s 367 h (cdr h) 368 q (cdr q)))))) 369 (t ;(< (cadr h) (car q)) 370 (let ((tmp (cdr q))) 371 (setf (cdr q) (cdr p) 372 (cdr h) q 373 q tmp))))))) 349 (cond 350 ((endp p) p) 351 ((endp q) q) 352 (t 353 (multiple-value-bind 354 (greater-p equal-p) 355 (funcall order-fn (car p) (car q)) 356 (cond 357 (greater-p ; (> (cadr h) (car q)) 358 (cons (car p) (fast-add (cdr p) q order-fn add-fn)) 359 ) 360 (equal-p ; (= (cadr h)) (car q)) 361 (let ((s (funcall add-fn (lc p) (lc q)))) 362 (cond 363 ((universal-zerop s) 364 (fast-add (cdr p) (cdr q) order-fn add-fn)) 365 (t 366 ;; Adjust the lc of p 367 (setf (lc p) s) 368 (cons (car p) (fast-add (cdr p) (cdr q) order-fn add-fn)) 369 )))) 370 (t ;(< (cadr h) (car q)) 371 (cons (car q) (fast-add p (cdr q) order-fn add-fn)) 372 )))))) 374 373 375 374
Note:
See TracChangeset
for help on using the changeset viewer.