Scheme
Scheme is a functional programming language, dialect of Lisp with two distinguishing features: it is small and tries to be clean.Its language definition (latest being R5RS), including formal semantics, is about 50 pages long. This is good and bad. A good thing is that it is easy to implement, which makes it good for experimentation and learning in general, or as a core language to extend in a domain-specific way. It is also relatively easy to learn and master or to metaprogram (the Tube is a case in point). A bad thing is that it there the language definition has so few features that every implementation has to add its own to provide a useful programming environment, and that there are zillions of implementations that each does things in its own different, incompatible way. There now exist a process to harmonize such extensions, SRFIs. However, no such thing as a module system or a namespace management system has been standardized, which makes all these extensions a big mess.
It tries to be clean in the sense that it is not constrained much by backwards compatibility as is Common Lisp, but instead attemps to provide simple semantics. (It has been said that Scheme is a Lisp that tries to become ML). Among notable differences with respect traditional Lisp: Scheme has a single namespace for functions and variables (it is a "Lisp-1"); Scheme has first-class reentrant continuations (which implies lots of "interesting" problems for implementations); R5RS added a stripped-down special purpose macro system (though most Scheme implementations also have a full-blown defmacro-like macros).
- Schemers.org.
- Bibliography of Scheme-related Research.
- SRFI Scheme Request For Implementation.
- Richard Kelsey's FTP Site has the R5RS.
- Indiana University's Scheme repository, FTP, French FTP Mirror.
- CMU's Scheme repository.
- An Introduction to Scheme and its Implementation.
- An Executable Implementation of the Denotational Semantics for Scheme.
- SchemeTeacher.
- The Scheme Underground.
- LispOSes, a few of which are Scheme based.
- Oleg Kiselyov's Scheme Hash includes lots of R5RS macro virtuosity.
- Olin Shivers: History of T; T was an optimising native-code compiler for Scheme.
- Schematics a project devoted to the construction of high quality libraries for Scheme and PLT Scheme in particular.
- indent a Python/Haskell-like syntax for Scheme, using indentation in place of parentheses.
- mlish an infix syntax frontend for Scheme.
- Pico an educational Scheme with C-ish syntax.
- Sonya Stack-Oriented Notation Yearned Adaptor for Guile, processes postfix stack-based languages.
- Sugar adds indentation-sensitive syntax to the LISP reader of scheme.
Alternative syntaxes
- Siag Office Scheme In A Grid, a free office package for Unix.
- The Groupscheme Project groupware in Jscheme.
- WiLiKi, yet another Wiki clone written in Scheme.
Applications
- How To Use Scheme.
- The Scheme Programming Language, 2nd edition is online in hypertext format.
- Simply Scheme an introductory CS book about Scheme.
- Structure and Interpretation Of Computer Programs an excellent introductory computer science book. We strongly recommend this book to beginners.
- Teach Yourself Scheme In Fixnum Days.
- How to Design Programs An Introduction to Computing and Programming .
Books
- Bigloo outputs high performance binaries.
- DrScheme and MzScheme includes a portable gui library and an interactive environment, amongst other things.
- The Hotdog Compiler a new scheme compiler under development. Backends to the jvm, to c, and to .net using the same runtime system.
- MIT Scheme.
- S2 - a Scheme to Scheme Compiler.
- Stalin a very aggressive optimizing compiler for Scheme.
- Twobit a simple optimizing compiler for Scheme.
- Prescheme - a Scheme dialect and compiler, part of the s48 distributions.
- VLISP: A Verified Implementation of Scheme.
Compilers
Note: in the Lisp tradition some Scheme compilers have a REPL and compile every new definition incrementally. Other have a separate interpreter and few are batch only.- BRL - the Beautiful Report Language a dialect of Scheme.
- hpp: an HTML preprocessor a small Scheme system for preprocessing HTML.
- Mistie a programmable filter, defines a document's markup using Scheme.
- Scribe a text processor and a Scheme
- sgml-scheme a toolkit in Scheme for SGML.
- SLaTeX a program that allows you to write programs or program fragments ``as is'' in your TeX or LaTeX source.
- tex2page a TeX to HTML translator with special support for Scheme code typesetting.
- GNU TeXmacs a Guile extendable WYSIWYG structured document editor, inspired by TeX and Emacs.
- XML Parsers for Scheme.
- l2t a literate programming utility that allows easy insertions of program source snippets towards TeX files.
Document Processing
- escm Embedded SCheme processor.
- Guile.
- OScheme a small, embeddable interpreter, which conforms to R4RS, except for some restrictions.
- Script-Fu is the first (a TCL version exists now, also) GIMP scripting extension.
- SIOD: Scheme in One Defun a small-footprint implementation of Scheme that is provided with some database, Unix programming and cgi scripting extensions.
- SLIB a portable scheme library providing compatibility and utility functions.
- Sizzle an embeddable Scheme interpreter.
- TinyScheme a lightweight Scheme interpreter that implements as large a subset of R5RS.
Embeddable
- Icslas - a Scheme distributed extension.
- Infer a statically-typed dialect of Scheme.
- ModuLite Scheme Module Proposal.
- Jonathan Rees' Another Module System for Scheme. Also available via citeseer.
- pregexp Portable Regular Expressions for Scheme and Common Lisp.
- Ps3i - a Persistent Server-Side Scheme Interpreter.
- pserializer (.txt) portable serializer implementation.
- Scawk a port of AWK to Scheme.
- Verischemelog: Verilog embedded in Scheme a paper from USENIX Domain-Specific Languages 99.
Embeddings of other languages features into Scheme (excluding OO, see below)
- Dream a tiny (24Kb) and nearly R4RS compliant Scheme interpreter written entirely in x86 assembly for Linux
- Lunacy Lunacy is a virtual-machine/compiler for the 'diamond-like' core of the Scheme programming language
- Gauche - a Scheme interpreter at SourceForge, [MIA]Home, freshmeat entry.
- HScheme a Scheme interpreter written in Haskell.
- A Lisp Interpreter in Forth (lisp.tar.gz) a simple Lisp-dialect (Scheme with dynamic scoping) interpreter in FORTH.
- LispMe Home Page Scheme for the Palm PDA.
- LMU Scheme.
- nanoScheme a tiny scheme interpreter, written in Delphi as a Windows console app.
- PerlScheme a Scheme interpreter in Perl.
- PHPScheme a Scheme interpreter in PHP and JavaScript.
- PLT Scheme - a family of Scheme implementations.
- pyscheme Scheme in Python.
- Pocket Scheme a Scheme for Pocket PC and Handheld PC.
- QScheme a fast Scheme interpreter (generaly between 2 and 70 times faster than other Scheme interpreters).
- scheme48 aka s48 and the SCheme SHell.
- Scheme for Squeak.
- SCM.
- Systas - Tom Lord's Scheme interpreter, closely related to SCM and Guile.
- SXM (freshmeat entry) (a.k.a. CXEMA) a portable implementation of Scheme.
- Useless Toy Scheme [.tar.gz], FKA plonk, a Scheme bytecode interpreter.
- XLISP, from v. 3.0 is a superset of the Scheme with extensions to support object-oriented programming.
- WScheme aka World Scheme, a non-compliant Scheme interpreter.
Interpreters
- The Jscheme Web Programming Project, (also by Peter Norvig) Scheme in Java.
- jscm a Scheme interpreter in JavaScript.
- Kawa a Java-based Scheme system.
- SISC (freshmeat entry) an extensible Java based interpreter of Scheme.
- Skij small Scheme interpreter, written in and running in Java, has extensions that allow interactively creation, inspection, and manipulation of arbitrary Java objects.
Java based implementations
- The CM203 MUD (Agora Wiki) a MUD in Scheme.
- MUSEME a MUD in R4RS Scheme.
- SchMUSEa Scheme-based MUD featuring a concurrent OO persistent heap.
- World a secure-shellable ASCII-based graphical MUD in WScheme.
MUDs
- GLOS Greg's Little Object System.
- Meroon - a Scheme object system.
- Ooo2 - a poor man's roll your own object system.
- Purely-functional Object-Oriented System for a classless delegation-based oo system in Scheme.
- RScheme] an OO extended Scheme.
- Schematic a Concurrent Object-Oriented Extension to Scheme.
- Scheme++ a static OO Scheme extension.
- ScmObj an Object System for Scheme.
- Simulation of Object-Oriented Concepts and Mechanisms in Scheme.
- STklos a Scheme with CLOS-like object system and an interface to GTK+.
- Swindle PLT SCheme with many additional features, the main is a CLOS-like object system based on Tiny-CLOS from Xerox.
OO and related
- fuse a fully automatic partial evaluator for the functional subset of Scheme.
- The Program Generator Generator PGG a partial evaluation system for Scheme.
- Schism a partial evaluator for a pure (side effect free) subset of Scheme.
- Similix an autoprojector (self-applicable partial evaluator) for a large higher-order subset of Scheme.
Partial Evaluators
- chicken a Scheme-to-C compiler.
- Clike (freshmeat entry) a compiler which converts code written in a simple C-like language to Scheme.
- Hobbit a full R4RS Scheme to C code compiler.
- qobischeme a library of useful Scheme procedures for Scheme->C.
- Schelog an embedding of Prolog-style logic programming in Scheme.
- schlep a Scheme to C translator for a subset of Scheme.
- scm2cl a Common Lisp program that converts Scheme code to Common Lisp.
- scm2p a Scheme to Perl Translator.
- Scm2perl - converts Script-fu (The Gimp's Scheme-like scripting language) to Perl, part of the Perl Gimp module.
- sml2scm a source-to-source translator from core SML (SML without modules) to Scheme.
Translators from/to Scheme to/from other languages and related
- Envision: scheme with pictures an extension of Scheme to program computer vision (AI) applications.
- Grover a Groves, Graphs of Propertied Values (DAGs), Implementation for Scheme.
- Kali.
- The Larceny Project a simple and efficient run-time system for Scheme, currently running on the SPARC architecture.
- Hacking on a scheme implementation.
- Schematica (freshmeat entry) a visual Scheme environment.
- The Schemelet Page Scheme as a client-side web language.
- Scheme Cross Reference Directory a directory of Scheme syntax, procedures, and variables found in various Scheme implementations.
- scmxlate a configuration tool for software packages written in Scheme.
- Scwm Scheme Constraints/Configurable Window Manager.
- Shoe.
Other
- Idyl - a Dylan interpreter in Scheme.
- Ian Bicking's Logo in Scheme.
- Arthur Nunes-Harwitt's Logo in Scheme.
- Nyquist, A Sound Synthesis and Composition Language, implemented in XLisp.
Other languages implemented in Scheme
- RnRS - Revised^n Report on the Algorithmic Language Scheme.
- R4RS - Revised(4) Report on the Algorithmic Language Scheme.
- R5RS - Revised(5) Report on the Algorithmic Language Scheme.
- R6RS - a charter for change.
- r4rstest.scm - tests compliance to R4RS.
- Scheme Requests for Implementation (SRFI).
Standards and related
- #Scheme IRC channel on the FreeNode network. Clog's #scheme logs, .
- Scheme for Common Lispers - .
- Interpreter.scm - an interpreter for a simple language in Scheme.
- (MIA) Schema - a Scheme OS. See james' newer homepage.
- Scheme faq.
- Scheme data structures and algorithms
- Christopher B. Browne's Scheme page.
- Scheme Arcana.
- Synthcode's Scheme software.
- KSM-Scheme.
Unsorted
Pages in this topic: Better Scheme Descartes Dreme FDScript fx NeXeme Ocelot schemix Tube
Also linked from: AL C Compiler dlopen VM Common Lisp Continuation-Passing Style Design Pattern E Erlang EuLisp FramerD FunOS fxm Gerald Jay Sussman Guile Guile VM Kali kew Languages ToDo LispOS Lunacy Macro Meta-Circular Miasma NASOS Object-Oriented Parsing PL 101 Ravi REBOL Reflective Programming Languages SICP Sting Type System zzz