0.1.19 • Published 9 years ago

r6rs v0.1.19

Weekly downloads
23
License
MIT
Repository
github
Last release
9 years ago

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 (only let, 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

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