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).

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