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
9 years ago
0.1.9
9 years ago
0.1.8
9 years ago
0.1.7
9 years ago
0.1.6
9 years ago
0.1.5
9 years ago
0.1.4
9 years ago
0.1.3
9 years ago
0.1.2
9 years ago
0.1.1
9 years ago
0.1.0
9 years ago