(define (rat-add r1 r2) (let ((n1 (numer r1)) (d1 (denom r1)) (n2 (numer r2))

10
(define (make-rat n d) (if (and (number? n) (number? d) (not (= d 0))) (cons n d) (error "cannot make a rat with denominator 0"))) (define (numer r) (head r)) (define (denom r) (tail r))

Upload: chi

Post on 05-Jan-2016

30 views

Category:

Documents


5 download

DESCRIPTION

(define (make-rat n d)   (if (and (number? n) (number? d) (not (= d 0)))       (cons n d)       (error "cannot make a rat with denominator 0"))) (define (numer r) (head r)) (define (denom r) (tail r)). (define (rat-add r1 r2) (let ((n1 (numer r1)) (d1 (denom r1)) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (make-rat n d)  (if (and (number? n) (number? d) (not (= d 0)))      (cons n d)      (error "cannot make a rat with denominator 0")))

(define (numer r) (head r))(define (denom r) (tail r))

Page 2: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (rat-add r1 r2) (let ((n1 (numer r1)) (d1 (denom r1)) (n2 (numer r2)) (d2 (denom r2))) (make-rat (+ (* n1 d2) (* n2 d1)) (* d1 d2))))

(define (rat-mul r1 r2) (let ((n1 (numer r1)) (d1 (denom r1)) (n2 (numer r2)) (d2 (denom r2))) (make-rat (* n1 n2) (* d1 d2))))

Page 3: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (rat-eq r1 r2)  (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (= (* n1 d2) (* n2 d1))))

(define (rat-leq r1 r2)  (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (if (>= (* d1 d2) 0) ;;if d1 and d2 have the same sign        (<= (* n1 d2) (* n2 d1))        (>= (* n1 d2) (* n2 d1)))))

Page 4: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (make-rat n d)  (if (and (number? n) (number? d) (not (= d 0)))      (let ((g (gcd n d)))        (cons (/ n g) (/ d g)))      (error "...")))

(define (rat-eq r1 r2)  (and (= (numer r1) (numer r2))       (= (denom r1) (denom r2))))

Page 5: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (make-rat n d)  (if (and (number? n) (number? d) (not (= d 0)))      (let* ((n2 (if (> d 0) n (- n)))             (d2 (if (> d 0) d (- d)))             (g (gcd n2 d2)))        (cons (/ n2 g) (/ d2 g)))      (error "...")))

(define (rat-leq r1 r2)  (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (<= (* n1 d2) (* n2 d1))))

Page 6: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(defstruct <rat>  (n <number>) (d <number>))

(define (numer (r <rat>)) (get-rat-n r))(define (denom (r <rat>)) (get-rat-d r))

(define (new-rat (n <number>) (d <number>))  (if (not (zero? d))      (let ((g (gcd n d)))        (make-rat (/ n g) (/ d g)))      (error "...")))

Page 7: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (rat-add (r1 <rat>) (r2 <rat>)) (let ((n1 (numer r1)) (d1 (denom r1)) (n2 (numer r2)) (d2 (denom r2))) (new-rat (+ (* n1 d2) (* n2 d1)) (* d1 d2))))

(define (rat-mul (r1 <rat>) (r2 <rat>)) (let ((n1 (numer r1)) (d1 (denom r1)) (n2 (numer r2)) (d2 (denom r2))) (new-rat (* n1 n2) (* d1 d2))))

Page 8: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (rat-eq (r1 <rat>) (r2 <rat>))  (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (= (* n1 d2) (* n2 d1))))

(define (rat-leq (r1 <rat>) (r2 <rat>))  (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (if (>= (* d1 d2) 0) ;;if d1 and d2 have the same sign        (<= (* n1 d2) (* n2 d1))        (>= (* n1 d2) (* n2 d1)))))

Page 9: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (new-rat (n <number>) (d <number>))  (if (not (= d 0))      (let ((g (gcd n d)))        (make-rat (/ n g) (/ d g)))      (error "...")))

(define (rat-eq (r1 <rat>) (r2 <rat>))   (and (= (numer r1) (numer r2))       (= (denom r1) (denom r2))))

Page 10: (define (rat-add r1 r2)   (let ((n1 (numer r1))         (d1 (denom r1))         (n2 (numer r2))

(define (new-rat (n <number>) (d <number>))   (if (not (= d 0))      (let* ((n2 (if (> d 0) n (- n)))             (d2 (if (> d 0) d (- d)))             (g (gcd n2 d2)))        (make-rat (/ n2 g) (/ d2 g)))      (error "...")))

(define rat-leq (r1 <rat>) (r2 <rat>))   (let ((n1 (numer r1))        (d1 (denom r1))        (n2 (numer r2))        (d2 (denom r2)))    (<= (* n1 d2) (* n2 d1))))