LIPS Scheme is a powerful lisp interpreter written in JavaScript. The aim of the project is to create a fully R7RS-compliant Scheme in JavaScript.
The name LIPS is recursive acronym which stands for LIPS Is Pretty Simple. Over time the project may no longer be that simple in implementation but it always be LIPS.
Most important features of LIPS:
- Great integration with JavaScript. You can use any JS library out of the box.
- Asynchronous execution (auto resolving of promises with optional promise quotation).
- Literal regular expression.
- Functional helpers (inspired by RamdaJS and Lodash).
- Possibility modify the parser at runtime (add new syntax, similar to vectors and object).
- Possibility to set representation of new data types for write and display. With parser extensions you can make new data types have different syntax and still be homoicoic.
- Small JavaScript core with Standard Library implemented in basic Scheme.
- Full support of Unicode and Emoji.
- Support for SXML, that allow to write JSX e.g. with Preact or React apps.
- I/O Ports supports in browser with BrowserFS.
- Full numerical tower and Big Integer support (still not 100% fully unit tested).
- Powerful introspection (similar to the one in Python).
- Auto formatting of lisp code (pretty print).
- Lisp/hygienic macros and macroexpand.
- Builtin help system.
- Font used in logo is Telegrafico by ficod.
- Cover image for GitHub and blog posts use clipart by Baptiste Gaultier
- Part of the current parser is inspired by implementation in BiwaScheme by Yutaka HARA (yhara).
fetchpolyfill use unfetch by Jason Miller.- Browser
initfunction use ContentLoaded. - The rationalize algorithm is based on Kawa Scheme by Per M.A. Bothner, Alan Bawden and Marc Feeley.
ucs2decodefunction taken from punycode.js by Mathias Bynens.- Rosetta Code was used for:
- StackOverlow code was used for functions:
- Code formatter is roughly based on scheme-style and GNU Emacs scheme mode.
- Some helpers in standard library are inspired by same functions from RamdaJS library.
- Thanks to JS.org for providing free domain.
- Special thanks:
- Lassi Kortela for helping with Scheme code.
- Niels Wijers for handing over the lips npm name