close Warning: Can't synchronize with repository "(default)" (The repository directory has changed, you should resynchronize the repository with: trac-admin $ENV repository resync '(default)'). Look in the Trac log for more information.

Ignore:
Timestamp:
2016-06-10T09:50:24-07:00 (8 years ago)
Author:
Marek Rychlik
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/f4grobner/polynomial.lisp

    r4432 r4434  
    301301|#
    302302
     303
     304
     305
    303306#|
    304307(defun fast-add (p q order-fn add-fn)
     
    337340          (t
    338341           (rotatef (cdr q) r q)))))))
    339 |#     
    340 
     342|#
    341343
    342344;; Getter/setter of leading coefficient
     
    345347
    346348(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          ))))))
    374373
    375374
Note: See TracChangeset for help on using the changeset viewer.