Changeset 18 in CGBLisp


Ignore:
Timestamp:
Jan 27, 2009, 1:19:13 AM (15 years ago)
Author:
Marek Rychlik
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/parse.lisp

    r17 r18  
    247247    ((symbolp expr)
    248248     (nth (position expr vars) basis))
    249     ((eql (car expr ) 'expt)
    250      ($poly-expt (poly-eval-1 (cadr expr) vars order ring)
    251                  (caddr expr)
    252                  n order ring))
    253     (t
    254      (let ((r (mapcar
    255                #'(lambda (e) (poly-eval-1 e vars order ring))
    256                (cdr expr))))
    257        (ecase (car expr)
    258          (+ (reduce #'(lambda (p q) ($poly+ p q n order ring)) r))
    259          (-
    260           (if (endp (cdr r))
    261               ($minus-poly (car r) n ring)
    262               ($poly- (car r)
    263                       (reduce #'(lambda (p q) ($poly+ p q n order ring)) (cdr r))
    264                       n
    265                       order ring)))
    266          (*
    267           (reduce #'(lambda (p q) ($poly* p q n order ring)) r))
    268          (/
    269           ($poly/ (car r) (cadr r) ring)))))))
     249    ((consp expr)
     250     (case (car expr)
     251       (expt
     252        (if (= (length expr) 3)
     253            ($poly-expt (poly-eval-1 (cadr expr) vars order ring)
     254                        (caddr expr)
     255                        n order ring)
     256            (error "Too many arguments to EXPT")))
     257       (/
     258        (if (and (= (length expr) 3)
     259                 (numberp (caddr expr)))
     260            ($poly/ (cadr expr) (caddr expr) ring)
     261            (error "The second argument to / must be a number")))
     262       (otherwise
     263        (let ((r (mapcar
     264                  #'(lambda (e) (poly-eval-1 e vars order ring))
     265                  (cdr expr))))
     266          (ecase (car expr)
     267            (+ (reduce #'(lambda (p q) ($poly+ p q n order ring)) r))
     268            (-
     269             (if (endp (cdr r))
     270                 ($minus-poly (car r) n ring)
     271                 ($poly- (car r)
     272                         (reduce #'(lambda (p q) ($poly+ p q n order ring)) (cdr r))
     273                         n
     274                         order ring)))
     275            (*
     276             (reduce #'(lambda (p q) ($poly* p q n order ring)) r))
     277            )))))))
    270278
    271279             
Note: See TracChangeset for help on using the changeset viewer.