[File under "The top level is hopeless". A web search on that phrase should turn up related explanations, questions, and answers.]
At Tue, 8 Mar 2011 07:50:16 -0500, Sam Tobin-Hochstadt wrote: > `scheme/base' provides a binding called `exp', which requires 2 > arguments. When the compiler expands your definition, it looks at the > variable reference in the body of the function *before* it binds your > new `exp' definition. Therefore, it uses the `exp' that it has in > scope at that time -- the one from `scheme/base'. > > This is an instance of a general problem with compilation and > expansion at the top-level, and one of the many reasons why it's > better to write programs in modules. > > On Tue, Mar 8, 2011 at 7:37 AM, Yaron Gonen <[email protected]> wrote: > > Hi, > > (I'm using Dr Scheme version 4.2.2, with language R5RS, and the "Disallow > > redefining" is not checked.) > > > > The following code works perfectly: > > (define exp > > (lambda (b e) > > (if (= e 0) 1 > > (* b (exp b (- e 1)))))) > > (exp 2 5) > > > > However, when I include the line (#%require scheme/base), I get an error: > > exp: expects 1 argument, given 2: 2 4 > > > > How is that possible? > > > > Many thanks, > > Yaron > > > > _________________________________________________ > > For list-related administrative tasks: > > http://lists.racket-lang.org/listinfo/users > > > > > > -- > sam th > [email protected] > > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/users _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

