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:
2015-06-09T19:12:13-07:00 (9 years ago)
Author:
Marek Rychlik
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/f4grobner/termlist.lisp

    r894 r935  
    132132          f))
    133133
    134 (defun termlist-add (ring p q)
     134(defun termlist-add (ring-and-order p q
     135                     &aux
     136                       (ring (ro-ring ring-and-order))
     137                       (order (ro-order ring-and-order)))
     138  (declare (type list p q) (ring-and-order ring-and-order))
     139  (do (r)
     140      ((cond
     141         ((endp p)
     142          (setf r (revappend r q)) t)
     143         ((endp q)
     144          (setf r (revappend r p)) t)
     145         (t
     146          (multiple-value-bind
     147                (lm-greater lm-equal)
     148              (funcall order (termlist-lm p) (termlist-lm q))
     149            (cond
     150              (lm-equal
     151               (let ((s (funcall (ring-add ring) (termlist-lc p) (termlist-lc q))))
     152                 (unless (funcall (ring-zerop ring) s) ;check for cancellation
     153                   (setf r (cons (make-term (termlist-lm p) s) r)))
     154                 (setf p (cdr p) q (cdr q))))
     155              (lm-greater
     156               (setf r (cons (car p) r)
     157                     p (cdr p)))
     158              (t (setf r (cons (car q) r)
     159                       q (cdr q)))))
     160          nil))
     161       r)))
     162
     163(defun termlist-sub (ring p q
     164                     &aux
     165                       (ring (ro-ring ring-and-order))
     166                       (order (ro-order ring-and-order)))
    135167  (declare (type list p q) (ring-and-order ring))
    136168  (do (r)
    137169      ((cond
    138         ((endp p)
    139          (setf r (revappend r q)) t)
    140         ((endp q)
    141          (setf r (revappend r p)) t)
    142         (t
    143          (multiple-value-bind
    144              (lm-greater lm-equal)
    145              (funcall (ring-and-order-order ring) (termlist-lm p) (termlist-lm q))
    146            (cond
    147             (lm-equal
    148              (let ((s (funcall (ring-add ring) (termlist-lc p) (termlist-lc q))))
    149                (unless (funcall (ring-zerop ring) s)    ;check for cancellation
    150                  (setf r (cons (make-term (termlist-lm p) s) r)))
    151                (setf p (cdr p) q (cdr q))))
    152             (lm-greater
    153              (setf r (cons (car p) r)
    154                    p (cdr p)))
    155             (t (setf r (cons (car q) r)
    156                      q (cdr q)))))
    157          nil))
    158        r)))
    159 
    160 (defun termlist-sub (ring p q)
    161   (declare (type list p q) (ring-and-order ring))
    162   (do (r)
    163       ((cond
    164         ((endp p)
    165          (setf r (revappend r (termlist-uminus ring q)))
    166          t)
    167         ((endp q)
    168          (setf r (revappend r p))
    169          t)
    170         (t
    171          (multiple-value-bind
    172              (mgreater mequal)
    173              (funcall (ring-and-order-order ring) (termlist-lm p) (termlist-lm q))
    174            (cond
    175             (mequal
    176              (let ((s (funcall (ring-sub ring) (termlist-lc p) (termlist-lc q))))
    177                (unless (funcall (ring-zerop ring) s)    ;check for cancellation
    178                  (setf r (cons (make-term (termlist-lm p) s) r)))
    179                (setf p (cdr p) q (cdr q))))
    180             (mgreater
    181              (setf r (cons (car p) r)
    182                    p (cdr p)))
    183             (t (setf r (cons (make-term (termlist-lm q)
    184                                         (funcall (ring-uminus ring) (termlist-lc q))) r)
    185                      q (cdr q)))))
    186          nil))
     170         ((endp p)
     171          (setf r (revappend r (termlist-uminus ring q)))
     172          t)
     173         ((endp q)
     174          (setf r (revappend r p))
     175          t)
     176         (t
     177          (multiple-value-bind
     178                (mgreater mequal)
     179              (funcall order (termlist-lm p) (termlist-lm q))
     180            (cond
     181              (mequal
     182               (let ((s (funcall (ring-sub ring) (termlist-lc p) (termlist-lc q))))
     183                 (unless (funcall (ring-zerop ring) s) ;check for cancellation
     184                   (setf r (cons (make-term (termlist-lm p) s) r)))
     185                 (setf p (cdr p) q (cdr q))))
     186              (mgreater
     187               (setf r (cons (car p) r)
     188                     p (cdr p)))
     189              (t (setf r (cons (make-term (termlist-lm q)
     190                                          (funcall (ring-uminus ring) (termlist-lc q))) r)
     191                       q (cdr q)))))
     192          nil))
    187193       r)))
    188194
Note: See TracChangeset for help on using the changeset viewer.