A few seconds ago, Veer wrote: > I don't get it , can you explain in terms of environment and > interpretation .
`define' is defining a potentially recursive value, so that (define (loop) (loop)) works as you expect. In simple terms, you can think about an internal define as something that expands to a `letrec'. So what you wrote is basically the same as (define (make-color color) (letrec ([color color]) ...)) The scope of a `let' binding covers the body expression(s), and the scope of a `letrec' binding covers the initial expression too. > The simplistic view that I have is : The body of a function executes > , it encounters define form so expression part of define is > evaluated and bound to identifier part of define in a environment , > it then encounters the identifier color and then value of color is > returned. That would be a `let' behavior, which internal `define's don't use in racket. (Or in any scheme.) -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users