A practical Scheme interpreter written in JavaScript


Keywords
scheme, lisp, interpreter, repl, biwa, javascript, r6rs, r7rs, tuplespace
License
MIT
Install
npm install biwascheme@0.8.0

Documentation

BiwaScheme

biwascheme logo

BiwaScheme is a Scheme interpreter written in JavaScript.

Works with web browsers (including mobile devices) and Node.js.

Demos

see http://www.biwascheme.org/

Download

(Or you can just copy the file from ./release.)

How to use

Just load biwascheme.js (or biwascheme-min.js) and write Scheme code.

<!DOCTYPE html>
<html>
<body>

<div id="bs-console"></div>

<script src="biwascheme.js"></script>
<script type="text/biwascheme">
(display "hello, world!")
</script>

</body>
</html>

How to use with node.js to run a biwa script

  1. $ npm install -g biwascheme

  2. create a file a.scm:

    (display "Hello, world!") (newline)

  3. $ biwas a.scm

How to use from inside node.js as a module

  1. $ npm install biwascheme

  2. create a file a.js:

    var BiwaScheme = require("biwascheme"); BiwaScheme.run("(+ 1 2)"); // or BiwaScheme.run_file("a.scm");

  3. $ node a.js

Statically build biwa-powered website

The npm package contains biwascheme.mjs for module bundlers like rollup. See https://github.com/acmiyaguchi/svelte-biwascheme-example for an example.

Note that biwascheme.mjs does not include jQuery unlike biwascheme-x.y.z.js. You need to bundle jQuery manually if you want to use functions defined in src/library/webscheme_lib.js.

Building biwascheme.js

You need Node.js (tested with v16.5.0) and npm (tested with v7.20.1) to build biwascheme.js.

See doc/dev/build.md.

Development

How to run tests

Prerequisites: Node.js, npm

  1. $ npm install
  2. $ npm run serve
  3. Open http://localhost:7001/test/spec.html

Some more tests

Conformance

BiwaScheme implements most of the features of R7RS small, including first-class continuation and tail call optimization.

Major lacking features are:

  • syntax-rules
  • Exceptions
  • Library system

There are two limitations that arise from JavaScript. These will not be fixed (it's technically possible to fix but will be very inefficient).

  • Strings are immutable
  • Integers are not distinguished from float

Links

License

MIT-LICENSE

BiwaScheme logo by @jcubic: Creative Commons Attribution 3.0

Acknowledgements

Contact

https://github.com/biwascheme/biwascheme

Yutaka HARA (yhara) yutaka.hara.gmail.com http://twitter.com/yhara_en