On Jul 20, 2011, at 5:02 PM, Greg Hendershott wrote:
> Spoiler alert: It turned out to be no hurdle at all. The psychic
> whiplash lasted days/weeks, not weeks/months.
When I'm talking to teachers about starting in Scheme-related languages, they
always say "but the prefix notation will confuse the students!" In reality,
it's a much bigger problem for teachers than for students: with actual
students, it's an issue for a couple of days, and then they have bigger fish to
fry :-)
>> ... getting my head to read the deeper
>> nested (if (some thing) (else branch)) structures is somewhat painfull.
>
> Actually, "control flow" code like that is pretty easy with the right
> editor: The "if", "else" and indentation will be in much the same
> places you're used to. The underbrush will just be () instead of {}.
Right. Nested conditionals and loops in Racket are no more syntactically
painful than nested conditionals and loops in Java/C/C++, if you put braces
around the bodies.
( if ( > x y ) (+ x 3 ) ( * 4 y ) )
if ( x > y ) { x = 3 ; } else { y = 4 ; }
[Obviously, these don't do the same thing; I didn't want to be accused of
stacking the deck by doing an idiomatically-functional thing in both languages.]
> With time you may find yourself doing far fewer nested conditionals
> and loops, at all. Because you're using more-succinct tools like
> match, map, fold, etc.
Amen. I don't have any data on professional programmers, but my observation
from watching students is that imperatively-trained students write long
functions that do several different jobs, with I/O and computation all jumbled
up, while functionally-trained students write short functions that do exactly
one, clearly defined job.
Have you ever read Leo Brodie's _Thinking Forth_? The examples are in the
Forth language, but it's really about principles of good programming, and one
of them is "avoid flow-of-control constructs." Which he acknowledges one can't
do entirely, but one can do it more often than one expects, and in particular
one can almost always avoid NESTED flow-of-control constructs, using only one
per function.
Stephen Bloch
[email protected]
_________________________________________________
For list-related administrative tasks:
http://lists.racket-lang.org/listinfo/users