r6rs
A Scheme interpreter (Currently partly R6RS compliant)
This program is still work in progress! Use it on your own risk!
Usage
npm install r6rs
will do the trick.
;let machine = ;console; // NumberValue {value: 6}
Manually calling with AST
;let machine = ;console; // NumberValue {value: 6}// Note that you can skip expand phase if you don't want to use macro expansion// (Which includes let, letrec, and, ...)
Using native functions
;let machine = ;machine;console; // ()
Using REPL
npm install r6rs -g
then r6rs
will do the trick. :)
Implementation status
R6RS specification
Types
- Boolean
- Number (Only real numbers are supported for now)
- Character
- Vector
- String
- Symbol
- Pair (List)
- Procedure
- Bytevector
- Abbreviations (Not a type though)
Number
- Complex number
- Real (decimal) number
- Rational number
- Integer number
- NaN, infinity support
Library
- Library syntax support
Base library
- define, define-syntax
- quote, quasiquote, unquote
- lambda, if, set!
- cond, case (Only cond is supported)
- and, or
-
let
,let*
,letrec
,letrec*
,let-values
,let*-values
(onlylet
,let*
can be used due to lack of hygiene) - begin
- eqv?, eq?, equal?
-
(type name)?
-
(type name)->(type name)
(number->string doesn't support precision yet) - Rational number arithmetic operations (numerator, denominator, exact?, ...)
- Real number arithmetic operations
- Complex number arithmetic operations (make-rectangular, ...)
- Boolean operations
- Pair and list operations
- Symbol operations
- Character operations
- String operations
- Vector operations
- Errors and violations
- Control features (no call/cc yet)
- Iteration let
- let-syntax, letrec-syntax (not correctly implemented)
- syntax-rules (Hygienic use is not supported yet)
- identifier-syntax
Etc
- Tail call optimization
R6RS standard libraries specification
- Unicode operations
- Bytevector operations
- List utilities
- Sorting
- Control structures (do is not implemented)
- Records
- Exceptions and conditions
-
I/O -
File system -
Command-line access and exit values - Arithmetic
- Fixnums
- Flonums
- Exact bitwise arithmetic
- syntax-case
- Hashtables
- Enumerations
- eval
- Mutable pairs
- Mutable strings
SRFI
Nothing is supported yet