[racket] Replacing lambdas with defines
On Friday, Ashok Bakthavathsalam wrote:
> Below, I have enclosed the code from Rosetta for generating
> Permutations. Can someone show me how to replace nested lambdas with
> defines? Thanks,
> [...]
To clarify what I said on S.O., my comment was a reply to someone
saying that some lambda expression can't be made to use the shorthand.
What I meant is that there's no real need for an anonymous `lambda'
form, since you can always turn them into definitions -- just replace
(lambda (x y) (whatever))
with
(let ()
(define (foo x y) (whatever))
foo)
This is obviously not shorter and it won't read better -- so in
practical terms it's much better to just use `lambda'.
BTW, usually when people try to get rid of such "nested lambdas", the
motivation is to avoid some cost of generating a function at runtime.
If that's the case, then JFYI there is no such cost -- it's possible
to compile these functions ahead of time just like any other code,
there's no repeated code generation that happens in your example.
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!