On Jan 23, 2008 11:28 PM, Brad Beyenhof <[EMAIL PROTECTED]> wrote:

> On Jan 23, 2008 7:16 PM, Mark Schoonover <[EMAIL PROTECTED]>
> wrote:
> > Ex. 1.1
> *this one was pretty simple, I'll skip it
>
> > Ex. 1.2
> >
> > Welcome to DrScheme, version 372 [3m].
> > Language: Advanced Student.
> >
> > > (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
> > 14.8
>
> Why not 74/5?
>
> > > (* 3 (- 6 2) (- 2 7))
> > -60
> > > (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
> >      (* 3 (- 6 2) (- 2 7)))
> > -0.246
>
> Why not -37/150?
>
> > Ex. 1.3
> >
> > (define (square x) (* x x))
> > (define (sos x y) (+ (square x) (square y)))
> > (define (big3-sos x y z)
> >   (cond ((and (< x y) (< y z)) (sos y z))
> >         ((and (< z x) (< z y)) (sos x y))
> >         (else (sos x z))))
>
> I did this slightly differently. Your big3-sos definition falls down
> when two of the arguments are equal (in that case, it always returns
> the value of the "else" option, summing squares of x and z). I just
> used the operator '<=' each time you used '<'.
>
> > Ex. 1.4
> >
> > If b is less than zero, the - procedure is called to subtract a from
> > -b. If b is greater than zero, the + procedure is called to simply add
> > a and b.
>
> Actually, if b<0, it subtracts *b* from *a* (- a b). Then, since in
> this case b is negative, subtracting the negative value is the same as
> adding its absolute value.
>
> > Ex. 1.5
> >
> > I would think applicative order would return zero since it's going to
> > evaluate x first. Normal order, I'm not sure what it'll do. Trying it
> > with drscheme, it just keeps running forever without any end. Consumes
> > about 50% CPU, and eventually kicks the fan on the laptop CPU. When I
> > stop the process, it always stoped on (p) in the define.
>
> Yes, normal order attempts to evaluate the operator and all operands
> to primitive values before performing any sort of substitution. Since
> (p) always evaluates back to (p) (a non-primitive), that is why it
> will hang.
>
> ...and there are more exercises later on in the chapter, after 1.1.7
> of the text!
>
> Ex. 1.6
>
> 'new-if' uses cond to spawn a sub-environment (or "child process,"
> maybe?) for each recursion of sqrt-iter, and it never comes back out
> to deliver a value to the function. On the other hand, the special
> form 'if' stays at the top level of the definition and can return a
> value to the function.


That's not the way I'm thinking  new-if works. The built-in if will eval
one  predicate at a time, where as new-if will try to do both at the same
time and get into a loop.



>
> Ex. 1.7
>
> When computing the square root of a very small number, 0.001 is not a
> good enough threshold because it's likely a very large proportion of
> the final answer (what if you're computing (sqrt 0.001)?). When a very
> large number is the argument of sqrt, each iteration of the guess is
> extremely variable and a lot of tme will be wasted with that much
> precision. Therefore, here is a good replacement for 'good-enough?':
>
> (define (good-enough? guess x)
>        (if (or (< (/ (square guess) x) 1.001)
>                (> (/ (square guess) x) .999)) #t
>                                               #f))
> In English, if (the guess squared) divided by the argument is between
> .999 and 1.001, return true. Otherwise return false. Now, whether the
> argument is small or large, 'good-enough?' compares the guess and
> argument proportionally instead of having a fixed threshold.
>
>
> Ex. 1.8
>
> To use the cube-root function, only 'improve' and 'good-enough?' need
> to be changed:
> (define (improve guess x)
>     (/ (+ (/ x (square guess)) (* 2 guess)) 3))
> And, in my improved 'good-enough?' above, just put in (cube guess)
> each place you see (square guess), and add (define (cube x) (* x x x))
> elsewhere.
>
> --
> Brad Beyenhof                                 http://augmentedfourth.com
> The history of popular music is littered with great partnerships.
> Rodgers had his Hammerstein, Lennon had his McCartney, and Lloyd Webber
> had... his photocopier...                            ~Humphrey Lyttleton
>
> --
> [email protected]
> http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg
>



-- 
Mark Schoonover, CMDBA
http://www.linkedin.com/in/markschoonover
http://marksitblog.blogspot.com
[EMAIL PROTECTED]
-- 
[email protected]
http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg

Reply via email to