In Racket, Scheme, and Lisp, parentheses are NOT optional, they are meaningful. Everyone counts. Once you have programmed in this world for a while, however, you won't really see the parens anymore and you won't make nearly as many syntax mistakes as in 'ugly languages'.
Feel free to ask more on this list -- Matthias On Dec 12, 2012, at 10:25 AM, je back wrote: > There's something quite basic about how scheme works that eludes me. Please > let me know if it would be more appropriate to post this somewhere eles. > > This program works as I expect: > > (let loop ((a 0)) > (if (> a 3) > (print "it's over") > (begin (print a) > (loop (+ 1 a))))) > > If add an extra set of parentheses around the begin clause: > > (let loop ((a 0)) > (if (> a 3) > (print "it's over") > (begin ((print a) > (loop (+ 1 a)))))) > > I get the following (from DrRacket 5.3.1) : > 0123"it's over". . application: not a procedure; > expected a procedure that can be applied to arguments > given: #<void> > arguments...: > #<void> > > I don't understand how adding the extra parentheses caused the change in > behavior. > > Thanks, > Jan Erik > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users