0.1.19 • Published 8 years ago
r6rs v0.1.19
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.
import { Machine } from 'r6rs';
let machine = new Machine();
console.log(machine.evaluate('(+ 3 3)')); // NumberValue {value: 6}
Manually calling with AST
import { tokenize, parse, Machine } from 'r6rs';
let machine = new Machine();
console.log(machine.evaluate(expand(parse(tokenize('(+ 3 3)')), machine.expanderRoot))); // 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
import { Machine, NativeProcedureValue, PairValue } from 'r6rs';
let machine = new Machine();
machine.loadLibrary([
new NativeProcedureValue('alert', list => {
alert(list.car.value);
return new PairValue();
})
]);
console.log(machine.evaluate('(alert "Hello, world!")')); // ()
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/OFile systemCommand-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
0.1.19
8 years ago
0.1.18
8 years ago
0.1.17
8 years ago
0.1.16
8 years ago
0.1.15
8 years ago
0.1.14
8 years ago
0.1.13
8 years ago
0.1.12
8 years ago
0.1.11
8 years ago
0.1.10
8 years ago
0.1.9
8 years ago
0.1.8
8 years ago
0.1.7
8 years ago
0.1.6
8 years ago
0.1.5
8 years ago
0.1.4
8 years ago
0.1.3
8 years ago
0.1.2
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago