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 sbl...@adelphi.edu _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users