RE: [sicp-vsg] exercise1.6 Alyssa P Hacker's new-if
- The problem here is that since new-if is not a special form, it will always evaluate all its arguments.
This is not a problem if you are doing something like (new-if (= 2 3) 0 5). Both the then-clause and else-clause are evaluated before new-if is called, which amounts to nothing more than evaulating the value of 0 and 5. No big deal.
However, if you are doing something like this:
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
(sqrt-iter (improve guess x)
...the inner sqrt-iter call in the else-clause is always evaluated, regardless of whether the guess was good enough or not. The inner call to sqrt-iter is made before the outer new-if function gets a chance to have a go at it. You thus get into an infinite self-recursion calling in sqrt-iter.
On the other hand, since if is a special form, it does not evaluate it's arguments before-hand, so you manage to side-step this self-recursion issue.
Hope this helps,
Date: Sat, 17 Nov 2007 07:31:40 -0800
Subject: Re: [sicp-vsg] exercise1.6 Alyssa P Hacker's new-if
FYI, this has not not been an active mailing list for some time.
I don't have the textbook nor my solutions handy, but recall
the difficulties of working through SICP by myself. I gave up
In my opinion, it is not a good book for independent study.
As I recall, there are some "trick" questions in those early exercises.
You may have run into one. As I remember, the point of one
of them is that "if" must be a "special form"--or whatever the
Scheme jargon is-- and cannot be implemented as a function.
If I'm remembering correctly, the authors have set the reader up
for failure by posing a ill-formed, misleading question.
It's possible I'm remembering wrong on this particular exercise. Even if I am, there are plenty of other examples of bad pedagogy in SICP.
I had better success with "ANSI Common Lisp" by Paul Graham.
There are some Google discussion groups about Scheme and Lisp
that you might want to check out too.
"vincent.lau" <vince_lau@...> wrote:
about Alyssa P Hacker's new-if,i thought new-if just like original if
in scheme at first,but when i try to run the new-if version sqrt via
(print (sqrt 2)), there is nothing put out(i thought will be 1.4142),i
can't figure out what happed? who can explain it?
Yahoo! Groups Links
<*> To visit your group on the web, go to:
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
Be a better sports nut! Let your teams follow you with Yahoo Mobile. Try it now.
Get the power of Windows + Web with the new Windows Live. Power up!