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

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


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

> Thank you for your suggestion. I should work. And I may also use a
> variable name for "x" that isn't possible to conflict (use gensym).
> So, yes, there are ways to work around this issue. But I learnt that
> "let over lambda" in parenscript is different from that in common
> lisp. Is that right?
>

Yes, because Parenscript's target is JavaScript the semantics of many
operations is different from Common Lisp's.


> The reason why I want need this is that I have to pass the whole
> object as argument to a library function. Many js libraries seem like
> to use object as configuration argument.
>

In this case you probably don't need a closure as object's "member"
function.

vsevolod


>
> On Thu, Oct 13, 2011 at 3:13 PM, Vsevolod Dyomkin <vseloved at gmail.com>
> wrote:
> > 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
> >
> >
> > _______________________________________________
> > 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/67e3fd57/attachment.html>


More information about the parenscript-devel mailing list