[parenscript-devel] what's wrong?
Hello, I'm trying to convert my js strings into parenscript code but I've a problem. 1) This works (ps::ps (ps::chain $ (post jsonServerUrl (if (ps::@ data error) (alert (ps::@ data error)) (progn (alert "test1") (alert "test2") ))))) 2) This works (ps::ps (if (ps::@ data error) (alert (ps::@ data error)) (loop for i from 0 to arLen do (ps::chain newil (setAttribute "class" (if (= (ps::@ (ps:getprop data i) typedonnee) "tabgrouptype") "ui-state-default" "ui-state-default no-nest")) )))) 3) but this doesn't work (the if clause of first example if replaced by the if clause of the second one) (ps::ps (ps::chain $ (post jsonServerUrl (if (ps::@ data error) (alert (ps::@ data error)) (loop for i from 0 to arLen do (ps::chain newil (setAttribute "class" (if (= (ps::@ (ps:getprop data i) typedonnee) "tabgrouptype") "ui-state-default" "ui-state-default no-nest")) )))))) Is there something wrong with my code? Thanks FD
The error I see when evaluating your third example is happening because your LOOP..DO is being used as an expression (it's a branch of an IF form which is an argument to the POST function). This is illegal because LOOP..DO compiles to a statement in JS, not an expression. Here's a shorter version of the error: (ps (foo (loop for i from 0 to len do (bar)))) => compiler error Note that using LOOP..COLLECT instead of LOOP..DO does work, but only because PS goes to the trouble of wrapping it an a lambda that then gets called to return the collection: (ps (foo (loop for i from 0 to len collect (bar)))) => "foo((function () { var collect52 = []; for (var i = 0; i <= len; i += 1) { collect52.push(bar()); }; return collect52; })());" PS treats these two cases differently because LOOP..COLLECT (and its relatives like LOOP..SUM) are clearly "expressiony" while LOOP..DO isn't; wrapping the latter in a lambda isn't justifiable in the general case. Does this help? Daniel On Wed, Mar 23, 2011 at 10:13 AM, F D <dubfa@hotmail.com> wrote:
Hello,
I'm trying to convert my js strings into parenscript code but I've a problem.
1) This works (ps::ps (ps::chain $ (post jsonServerUrl (if (ps::@ data error) (alert (ps::@ data error)) (progn (alert "test1") (alert "test2") ))))) 2) This works (ps::ps (if (ps::@ data error) (alert (ps::@ data error)) (loop for i from 0 to arLen do (ps::chain newil (setAttribute "class" (if (= (ps::@ (ps:getprop data i) typedonnee) "tabgrouptype") "ui-state-default" "ui-state-default no-nest"))
))))
3) but this doesn't work (the if clause of first example if replaced by the if clause of the second one) (ps::ps (ps::chain $ (post jsonServerUrl (if (ps::@ data error) (alert (ps::@ data error)) (loop for i from 0 to arLen do (ps::chain newil (setAttribute "class" (if (= (ps::@(ps:getprop data i) typedonnee) "tabgrouptype") "ui-state-default" "ui-state-default no-nest")) ))))))
Is there something wrong with my code?
Thanks
FD
_______________________________________________ parenscript-devel mailing list parenscript-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
participants (2)
-
Daniel Gackle
-
F D