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.

Changeset 4537 for branches


Ignore:
Timestamp:
2016-06-18T13:46:17-07:00 (8 years ago)
Author:
Marek Rychlik
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/f4grobner/slow-add.lisp

    r4495 r4537  
    3535        (t
    3636         (rotatef (cdr q) r q))))))
     37
     38(defun s-add (p q order-fn add-fn &aux result)
     39  "Non-recursive version of SLOW-ADD."
     40  (loop
     41     (cond
     42       ((endp p) (return-from s-add (nreconc result q)))
     43       ((endp q) (return-from s-add (nreconc result p)))
     44       (t
     45        (multiple-value-bind
     46              (greater-p equal-p)
     47            (funcall order-fn (car p) (car q))
     48          (cond
     49            (greater-p                  ; (> (car p) (car q))
     50             (push (pop p) result)
     51             )
     52            (equal-p                    ; (= (car p)) (car q))
     53             (let ((s (funcall add-fn (lc p) (lc q))))
     54               (cond
     55                 ((universal-zerop s)
     56                  (pop p))
     57                 (t
     58                  ;; Adjust the lc of p
     59                  (setf (lc p) s)
     60                  (push (pop p) result)
     61                  )
     62                 ))
     63             (pop q)
     64             )
     65            (t      ;(< (car p) (car q))                       
     66             (push (pop q) result)
     67             )
     68            ))))))
Note: See TracChangeset for help on using the changeset viewer.