0.1.19 • Published 9 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
9 years ago
0.1.18
9 years ago
0.1.17
9 years ago
0.1.16
9 years ago
0.1.15
9 years ago
0.1.14
9 years ago
0.1.13
9 years ago
0.1.12
9 years ago
0.1.11
9 years ago
0.1.10
10 years ago
0.1.9
10 years ago
0.1.8
10 years ago
0.1.7
10 years ago
0.1.6
10 years ago
0.1.5
10 years ago
0.1.4
10 years ago
0.1.3
10 years ago
0.1.2
10 years ago
0.1.1
10 years ago
0.1.0
10 years ago