[parenscript-devel] "let over lambda" seems buggy

Vsevolod Dyomkin vseloved at gmail.com
Thu Oct 13 07:13:05 UTC 2011


I suggest, that you first consider, how would you do that in JS. You'll need
to wrap that in functions:

{
'fn_1' : (function () {
              var x = 1;
              return function () { return x; } }) (),
'fn_2' : (function () {
              var x = 2;
              return function () { return x; } }) ()
}

Now let's think, how this can be done in Parenscript?..

PS. But the most important question is: why do you need to create a single
function, that closes over a "private" variable, as part of an object? Isn't
it equivalent to just coding the value of the variable inside the function?

vsevolod


On Thu, Oct 13, 2011 at 10:05 AM, Canhua <dreameration at gmail.com> wrote:

> actually what I want to achieve is something like this:
> (create "fn_1" (let ((x))
>                         #'(lambda ()
>                             x))
>           "fn_2" (let ((x))
>                         #'(lambda ()
>                             x)))
> and I expected these two "x" are lexical-scope separate and so
> independent from each other.
> However the compiled js code doesn't work as I expected.
>
>
> On Thu, Oct 13, 2011 at 2:51 PM, Vsevolod Dyomkin <vseloved at gmail.com>
> wrote:
> > Hi
> > Actually the above code is correct.
> > You can also use:
> > - either
> > (let (x)
> >     (create "fn" (lambda () x)))
> > - or
> > (create "x" nil
> >            "fn" (lambda () x)))
> > depending on the JS semantics you want to get.
> > vsevolod
> >
> >
> > On Thu, Oct 13, 2011 at 8:40 AM, Canhua <dreameration at gmail.com> wrote:
> >>
> >> hi, all, I found that
> >>     (create "fn" (let ((x))
> >>                        (lambda () x)))
> >>
> >> compiles to
> >>     { 'fn' : (x = null, function () {
> >>      return x;
> >>     }) }
> >>
> >> wherein the variable x may conflict with a variable with the same name
> >> outside this code.
> >> How may avoid this? How may I achieve "let over lambda" closure effect
> >> as in common lisp?
> >>
> >> Thanks.
> >>
> >> _______________________________________________
> >> parenscript-devel mailing list
> >> parenscript-devel at common-lisp.net
> >> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
> >
> >
> > _______________________________________________
> > parenscript-devel mailing list
> > parenscript-devel at common-lisp.net
> > http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
> >
> >
>
> _______________________________________________
> parenscript-devel mailing list
> parenscript-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/parenscript-devel/attachments/20111013/606188c2/attachment.html>


More information about the parenscript-devel mailing list