home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-04-27 | 1.4 KB | 46 lines | [TEXT/????] |
- ;;; $Header: algcon.scm,v 1.2 87/08/26 13:14:07 GMT gjs Exp $
- ;;;; ALGCON.SCM
- ;;; Algebraic constructors for symbolic experiments.
-
- (if-mit
- (declare (usual-integrations = + - * /
- zero? 1+ -1+
- ;; truncate round floor ceiling
- sqrt exp log sin cos)))
-
- (define (make-sum a1 a2)
- (cond ((and (number? a1) (number? a2)) (+ a1 a2))
- ((number? a1) (if (= a1 0) a2 `(+ ,a1 ,a2)))
- ((number? a2) (if (= a2 0) a1 `(+ ,a2 ,a1)))
- (else `(+ ,a1 ,a2))))
-
- (define (make-prod m1 m2)
- (cond ((and (number? m1) (number? m2)) (* m1 m2))
- ((number? m1)
- (cond ((= m1 0) 0)
- ((= m1 1) m2)
- (else `(* ,m1 ,m2))))
- ((number? m2)
- (cond ((= m2 0) 0)
- ((= m2 1) m1)
- (else `(* ,m2 ,m1))))
- (else `(* ,m1 ,m2))))
-
- (define (make-diff a1 a2)
- (cond ((and (number? a1) (number? a2)) (- a1 a2))
- ((number? a1) (if (= a1 0) `(- ,a2) `(- ,a1 ,a2)))
- ((number? a2) (if (= a2 0) a1 `(- ,a1 ,a2)))
- (else `(- ,a1 ,a2))))
-
- (define (make-quo m1 m2)
- (cond ((and (number? m1) (number? m2)) (/ m1 m2))
- ((number? m1)
- (cond ((= m1 0) 0)
- (else `(/ ,m1 ,m2))))
- ((number? m2)
- (cond ((= m2 0)
- (error "Divide by zero -- MAKE-QUO"))
- ((= m2 1) m1)
- (else `(/ ,m1 ,m2))))
- (else `(/ ,m1 ,m2))))
-