<div dir="ltr">Francois,<div><br></div><div>Two Q:s:</div><div><br></div><div>First, when you got a very basic sample app like a DOM-based hangman going, feel free to share code</div><div><br></div><div>Second, how is the type mapping - fixnums, flonums, bignums all wrapped to JS double, Scheme string and vector to JS string and vector?</div>

<div><br></div><div>Thanks,</div><div>Mikael</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/11/21 Francois Magnan <span dir="ltr"><<a href="mailto:magnan@categoricaldesign.com" target="_blank">magnan@categoricaldesign.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Hi,</div><div><br></div><div>Sorry to disturb you again on this. I continued my experiments with “-target js”. I reimplemented quasiquote, unquote… and I stumbled on a strange bug that mystifies me: now “cons” function is not known. I have sucessfully compiled programs using cons with -target js many times but now it just won’t compile it correctly. Here is a simplified version of the code just to illustrate what I see:</div>

<div><br></div><div><br></div><div><div style="margin:0px"><div style="margin:0px"><font face="Monaco" size="1">; File: </font><span style="font-family:Monaco;font-size:10px"> Minimal-Ex1.scm</span></div><div style="margin:0px">

<span style="font-family:Monaco;font-size:x-small"><br></span></div><div style="margin:0px"><span style="font-family:Monaco;font-size:x-small"><br></span></div><div style="margin:0px"><span style="font-family:Monaco;font-size:x-small">(declare (standard-bindings)</span></div>

<div style="margin:0px"><font face="Monaco" size="1">         (extended-bindings)</font></div><div style="margin:0px"><font face="Monaco" size="1">         (fixnum) (not safe))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br>

</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">; include Marc's code </font></div><div style="margin:0px"><font face="Monaco" size="1">(include "obj2str.scm")</font></div>

<div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">;;;</font></div><div style="margin:0px">

<font face="Monaco" size="1">;;;; debugging utility</font></div><div style="margin:0px"><font face="Monaco" size="1">;;;</font></div><div class="im"><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px">

<font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (console.log x)</font></div><div style="margin:0px"><font face="Monaco" size="1">  ;; Note: the parameter x will be in variable Gambit_r1</font></div>

</div><div style="margin:0px"><font face="Monaco" size="1">  (##inline-host-statement "console.log(Gambit_r1.toString());\n"))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px">

<font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">;;;</font></div><div style="margin:0px"><font face="Monaco" size="1">;;;; list utilities I had to redefine</font></div><div style="margin:0px">

<font face="Monaco" size="1">;;;</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (myreverse l)</font></div>

<div style="margin:0px"><font face="Monaco" size="1">  (define (iter a b)</font></div><div style="margin:0px"><font face="Monaco" size="1">    (if (null? a) b</font></div><div style="margin:0px"><font face="Monaco" size="1">      (iter (cdr a) (cons (car a) b))))</font></div>

<div style="margin:0px"><font face="Monaco" size="1">  (iter l (list)))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div>

<div style="margin:0px"><font face="Monaco" size="1">(define (iota n)</font></div><div style="margin:0px"><font face="Monaco" size="1">  (myreverse (riota n)))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br>

</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (riota n)</font></div><div style="margin:0px"><font face="Monaco" size="1">  (if (= n 0) </font></div>

<div style="margin:0px"><font face="Monaco" size="1">      (cons 0 '())</font></div><div style="margin:0px"><font face="Monaco" size="1">    (cons n (riota (- n 1)))))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br>

</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (foldl func accum lst)</font></div><div style="margin:0px"><font face="Monaco" size="1">  (if (null? lst)</font></div>

<div style="margin:0px"><font face="Monaco" size="1">      accum</font></div><div style="margin:0px"><font face="Monaco" size="1">      (foldl func (func accum (car lst)) (cdr lst))))</font></div><div style="margin:0px">
<font face="Monaco" size="1"><br>
</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (foldr func end lst)</font></div><div style="margin:0px"><font face="Monaco" size="1">  (if (null? lst)</font></div>

<div style="margin:0px"><font face="Monaco" size="1">      end</font></div><div style="margin:0px"><font face="Monaco" size="1">      (func (car lst) (foldr func end (cdr lst)))))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br>

</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (appendo . lists)</font></div><div style="margin:0px"><font face="Monaco" size="1"><span style="white-space:pre-wrap">  </span>(foldl append2 '() lists))</font></div>

<div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1">(define (append2 l1 l2)<span style="white-space:pre-wrap">   </span></font></div>

<div style="margin:0px"><font face="Monaco" size="1">  (foldr cons l2 l1))</font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div><div style="margin:0px"><font face="Monaco" size="1"><br></font></div>

<div style="margin:0px"><font face="Monaco" size="1">(console.log (object->string (cons 1 2)))   ; OK   (1 . 2) </font></div><div style="margin:0px"><font face="Monaco" size="1">(console.log (object->string (iota 5)))     ; OK   (0 1 2 3 4 5)</font></div>

<div style="margin:0px"><font face="Monaco" size="1">(console.log (object->string (append2 (list 1 2 3) (list 'a 'b 'c))))  ; FAILS [Error] ReferenceError: Can't find variable: Gambit_bb1_cons</font></div>

<div style="font-family:Monaco;font-size:10px"><br></div><div style="font-family:Monaco;font-size:10px">—————————————————————————————————————-</div><div style="font-family:Monaco;font-size:10px">magnan$ gsc -c -target js  Minimal-Ex1.scm</div>

<div style="font-family:Monaco;font-size:10px"><div style="margin:0px">magnan$ node Minimal-Ex1.js </div><div style="margin:0px">(1 . 2)</div><div style="margin:0px">(0 1 2 3 4 5)</div><div style="margin:0px;min-height:14px">

<br></div><div style="margin:0px">/Users/magnan/CDSCode/CDSProducts/Athena-Embedded/src/Athena-Embedded/Minimal-Ex1.js:5551</div><div style="margin:0px">  Gambit_r1 = (Gambit_bb1_cons);</div><div style="margin:0px">               ^</div>

<div style="margin:0px">ReferenceError: Gambit_bb1_cons is not defined</div></div></div></div><div><br></div><div>You see that (cons 1 2) and (iota 5) compiles well but not (append2 … ). </div><div>Can you explain this?</div>

<div><br></div><div>Thank you,</div><div>Francois Magnan</div><div><br></div><br><div><div class="im"><div>On 2013-11-18, at 16:02, Francois Magnan <<a href="mailto:magnan@categoricaldesign.com" target="_blank">magnan@categoricaldesign.com</a>> wrote:</div>

<br></div><blockquote type="cite">Hi Marc,<br><br>I was finally able to make a simplified version my program work when compiled to javascript but I am missing some crucial elements to complete the experiment:<br><br>1 - Variable number of parameters for functions: (define (function . args) …)<br>

2 - Quasiquote, unquote and unquote-splicing<br><br>Without 1) I cannot get functions like “append” so I have a hard time trying to solve 2). <br>Can you give me hints for that or drop me an email when those features become available with the “-target js” option?<br>

<br>Thank you,<br>François<div class="im"><br><br><br><br><br><br>On 2013-11-14, at 17:06, Marc Feeley <<a href="mailto:feeley@iro.umontreal.ca" target="_blank">feeley@iro.umontreal.ca</a>> wrote:<br><br><blockquote type="cite">

<br>On Nov 14, 2013, at 4:23 PM, Francois Magnan <<a href="mailto:magnan@categoricaldesign.com" target="_blank">magnan@categoricaldesign.com</a>> wrote:<br><br><blockquote type="cite">By the way ##inline-host-code doesn’t seem to work anymore.<br>

<br>(define (console.log x)<br> ;; Note: the parameter x will be in variable Gambit_r1<br> (##inline-host-code “console.log(Gambit_r1);\n”))<br><br>How can I inline javascript code now?<br>Thank you,<br>Francois<br><br></blockquote>

<br>Recall that ##inline-host-code no longer exists... you have to use ##inline-host-statement and ##inline-host-expression depending on the nature of the code.  For example, this works for me using node:<br><br>(declare (extended-bindings) (not safe))<br>

<br>(define (show arg)<br> (##inline-host-statement "console.log(Gambit_r1.toString());"))<br><br>(show 'hello)<br><br>(show "world")<br><br>(show (##inline-host-expression "1+2+3"))<br>
<br>
Marc<br><br></blockquote><br></div></blockquote></div><br></div><br>_______________________________________________<br>
Gambit-list mailing list<br>
<a href="mailto:Gambit-list@iro.umontreal.ca">Gambit-list@iro.umontreal.ca</a><br>
<a href="https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list" target="_blank">https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list</a><br>
<br></blockquote></div><br></div>