[gambit-list] Using the JavaScript back-end

Blake McBride blake at mcbride.name
Sun Feb 1 23:35:03 EST 2015


>
> Here is the result of your example:
>

$ gsc -c -target js f1.scm
$ node f1.js

/home/blake/gambit/f1.js:448
  print(obj);
  ^
ReferenceError: print is not defined
    at gambit_println (/home/blake/gambit/f1.js:448:3)
    at gambit_bb1_println (/home/blake/gambit/f1.js:323:3)
    at gambit_trampoline (/home/blake/gambit/f1.js:348:10)
    at Object.<anonymous> (/home/blake/gambit/f1.js:688:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
$


>
> In any case, here is a simple example and instructions on how to run the
> code in a JS shell and in the browser.  If you want to use non-primitive
> predefined Scheme library functions (such as equal?, append, map, write,
> etc) you will need to look into univ-lib .  The goal is to have all of this
> neatly packaged in gsc so that one invocation of gsc will do all that is
> necessary.  One issue is linking… should the .js file contain all of the
> application code including Scheme libraries, or should it contain just the
> code for the compiled file (so that it can be dynamically loaded by the web
> page)?  Both should be supported with an appropriate compile flag.
>
> Marc
>
>
> ;; File: fib.scm
> ;;
> ;; compile with: gsc -c -target js fib.scm
> ;;
> ;; execute with: d8 fib.js
> ;;
> ;; or use it in an HTML page like this:
> ;;
> ;; <!DOCTYPE html>
> ;; <html>
> ;; <head>
> ;;     <title>fib</title>
> ;;     <script type="text/javascript">
> ;;         function print(x) { console.log(x); }
> ;;     </script>
> ;;     <script type="text/javascript" src="fib.js"></script>
> ;; </head>
> ;; <body></body>
> ;; </html>
>
> (declare
>   (standard-bindings)
>   (extended-bindings)
>   (not safe)
>   (fixnum)
>   (block)
> )
>
> (define (fib n)
>
>   (define (fib n)
>     (if (< n 2)
>         n
>         (+ (fib (- n 1))
>            (fib (- n 2)))))
>
>   (fib n))
>
> (define start (real-time-milliseconds))
>
> (println (fib 30))
>
> (define end (real-time-milliseconds))
>
> (println (- end start))
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20150201/4c2e12ba/attachment.htm>


More information about the Gambit-list mailing list