On Thu, Oct 13, 2011 at 10:25 AM, Canhua dreameration@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@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@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@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@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@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel mailing list parenscript-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel