This preview shows page 1. Sign up to view the full content.
Unformatted text preview: Let. We write a function that returns a sentence containing the two roots of the quadratic equation ax 2 + bx + c = 0 using the formula x = b b 2 4 ac 2 a (We assume, to simplify this presentation, that the equation has two real roots; a more serious program would check this.) ;;;;; In file cs61a/lectures/1.3/roots.scm (define (roots a b c) (se (/ (+ (- b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a)) (/ (- (- b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a)) )) This works fine, but its inefficient that we have to compute the square root twice. Wed like to avoid that by computing it once, giving it a name, and using that name twice in figuring out the two solutions. We know how to give something a name by using it as an argument to a function: ;;;;; In file cs61a/lectures/1.3/roots.scm (define (roots a b c) (define (roots1 d) (se (/ (+ (- b) d) (* 2 a)) (/ (- (- b) d) (* 2 a)) )) (roots1 (sqrt (- (* b b) (* 4 a c)))) ) Roots1 is an internal helper function that takes the value of the square root in the formula as its argument...
View Full Document
- Spring '10