wiki/articles/scheme.md

2.6 KiB

Scheme

Scheme is a Lisp dialect created in 1975 by Guy Steele and Gerald Sussman at the MIT. Scheme is minimalistic and elegant leaning towards a functional programming paradigm, being the language used in the famous SICP book (using the MIT/GNU Scheme implementation).

Scheme is standardized in a series of documents called Revised^n Report on the Algorithmic Language Scheme (RnRS) (where the n stands for the version), being the most popular the R5RS revision released in 1998.

Controversy around the R6RS revision (The Great Bloatening)

In 2003 work in a new revision of Scheme began, R6RS, finished in 2007. This new revision was controversial since it added additional features that Scheme hackers deemed as a departure from Scheme's minimalism. In a attempt to amend this, work on R7RS began, splitting Scheme into two different (but still similar) languages, differing in the amount of features; a big language for "practical" use and a small minimalistic version.

Implementations

Since Scheme (specially the R5RS standard) is simple, there are multiple implementations:

  • CHICKEN Scheme: compiler (AOT) and interpreter.
  • MIT/GNU Scheme: compiler, one of the "original" implementations, also includes a debugger.
  • Chez Scheme: another classic compiler, freed in 2016.
  • GNU Guile: main Scheme implementation of the GNU project, used as a scripting language in some GNU projects.
  • Gambit Scheme
  • Chibi Scheme: small implementation with a focus in being embeddable.
  • ...

Examples

Hello World

(display "Hello, Scheme!")

Factorial

;;; Tail recursive factorial
(define (fact n acc)
  (if (zero? n)
	acc
	(fact (- n 1) (* acc n))))

(let ((ns '(4 0 5 10 1)))
  (for-each (lambda (n)
			  (display n)
			  (display "! = ")
              (display (fact n 1))
              (newline))
            ns))

Resources