Lispkit Lisp
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
Paradigm | pure functional |
---|---|
Family | Lisp |
Designed by | Peter Henderson |
First appeared | 1980 |
Scope | lexical |
Implementation language | ALGOL |
Influenced by | |
ALGOL, Lisp |
Lispkit Lisp is a lexically scoped, purely functional subset of Lisp (Pure Lisp) developed as a testbed for functional programming concepts. It was first used for early experimentation with lazy evaluation. An implementation based on a stack, environment, control, dump virtual machine and abstract machine (SECD machine) written in an ALGOL variant was published by the developer Peter Henderson in 1980.[1] The compiler and virtual machine are highly portable and as a result have been implemented on many machines.[2][3]
Base language
[edit]The base language provides the following functions only but extensions are discussed in Henderson's book[1] for the explicit support of lazy evaluation and nondeterministic programming.
atom
– given an expression returns True if its value is atomic; False if notadd
– given two expressions returns the sum of their numeric valuescar
– given an expression whose value is a pair, returns the pair's first valuecdr
– given an expression whose value is a pair, returns the pair's second valuecons
– given two expressions returns a value pair consisting of their valuesdiv
– given two expressions returns the quotient of their numeric valueseq
– given two expressions returns True if their values are equal; False if notif
– given three expressions returns the value of the second if the value of the first is True, otherwise returns the value of the thirdlambda
– given an argument list and an expression, returns them as a functionlet
– given an expression with declarations (as named expressions visible in the expression) returns its valueletrec
– like let, except the declared names are also visible in the declarations themselvesleq
– given two expressions, returns True if the value of the first is numerically less than or equal to the value of the second; False if notmod
(orrem
) – given two expressions, returns the modulus (also known as the remainder) of their numeric valuesmul
– given two expressions, returns the product of their numeric valuesquote
– given an expression, returns that expression as a valuesub
– given two expressions, returns the difference of their numeric values
The functions, lambda
, let
, and letrec
, are similar but have subtle differences in the way that they treat named variables which make them useful in different ways: lambda
defines and returns a function, let
binds expressions to variable names, and letrec
is essentially similar to let
except it allows defining of recursive functions and values, e.g., infinite series.
References
[edit]- ^ a b Henderson, Peter (1980). Functional Programming: Application and Implementation. Prentice Hall. ISBN 0-13-331579-7.
- ^ McJones, Paul (12 May 2014). "Original OUCL PRG LispKit". Computer History Museum: Software Preservation Group. Mountain View, California: University of Oxford – via Plone Foundation.
- ^ McJones, Paul (12 May 2014). "Aaron Gray's port of LispKit to GNU Pascal". Computer History Museum: Software Preservation Group. Mountain View, California: Cybercomms.org – via Plone Foundation.
Further reading
[edit]- Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 December 1983). The LispKit Manual. University of Oxford Computing Laboratory. ISBN 978-0902928183.
- Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 December 1983). The LispKit Manual: Volume 1 (PDF). Oxford, England: University of Oxford: Computing Laboratory: Programming Research Group.
- Henderson, Peter; Jones, Geraint A.; Jones, Simon B. (1 December 1983). The LispKit Manual: Volume 2 (PDF). Oxford, England: University of Oxford: Computing Laboratory: Programming Research Group.