Template:Short description Template:Redirect Template:Infobox programming language
SETL (SET Language) is a very high-level programming language<ref name=":0">Template:Cite journal</ref> based on the mathematical theory of sets.<ref name=":2">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref name=":3">Template:Cite news</ref> It was originally developed at the New York University (NYU) Courant Institute of Mathematical Sciences in the late 1960s, by a group containing (Jack) Jacob T. Schwartz,<ref name=":0" /><ref name=":3" /> R.B.K. Dewar, and E. Schonberg.<ref name=":0" /> Schwartz is credited with designing the language.<ref>Template:Cite book</ref>
DesignEdit
SETL provides two basic aggregate data types: (unordered) sets, and tuples.<ref name=":0" /><ref name=":2" /><ref name=":4">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> The elements of sets and tuples can be of any arbitrary type, including sets and tuples themselves, except the undefined value om<ref name=":0" /> (sometimes capitalized: OM).<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> Maps are provided as sets of pairs (i.e., tuples of length 2) and can have arbitrary domain and range types.<ref name=":0" /><ref name=":4" /> Primitive operations in SETL include set membership, union, intersection, and power set construction, among others.<ref name=":0" /><ref name=":5">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
SETL provides quantified boolean expressions constructed using the universal and existential quantifiers of first-order predicate logic.<ref name=":0" /><ref name=":5" />
SETL provides several iterators to produce a variety of loops over aggregate data structures.<ref name=":0" /><ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
ExamplesEdit
Print all prime numbers from 2 to Template:Var:
print([n in [2..N] | forall m in {2..n - 1} | n mod m > 0]);
The notation is similar to list comprehension.
A factorial procedure definition:
procedure factorial(n); -- calculates the factorial n! return if n = 1 then 1 else n * factorial(n - 1) end if; end factorial;
A more conventional SETL expression for factorial (n > 0):
*/[1..n]
UsesEdit
Implementations of SETL were available on the CDC 6600, CDC Cyber, DEC VAX, IBM/370, SUN workstation and APOLLO.<ref>Template:Cite book</ref> In the 1970s, SETL was ported to the BESM-6, ES EVM and other Russian computer systems.<ref>Template:Cite book</ref>
SETL was used for an early implementation of the programming language Ada, named the NYU Ada/ED translator.<ref>Template:Cite book</ref> This later became the first validated Ada implementation, certified on April 11, 1983.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
According to Guido van Rossum, "Python's predecessor, ABC, was inspired by SETL -- Lambert Meertens spent a year with the SETL group at NYU before coming up with the final ABC design!"<ref>Python-Dev: SETL (was: Lukewarm about range literals)</ref>
Language variantsEdit
SET Language 2 (SETL2), a backward incompatible descendant of SETL, was created by Kirk Snyder of the Courant Institute of Mathematical Sciences at New York University in the late 1980s.<ref name=":1">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> Like its predecessor, it is based on the theory and notation of finite sets, but has also been influenced in syntax and style by the Ada language.<ref name=":1" />
Interactive SET Language (ISETL) is a variant of SETL used in discrete mathematics.<ref>Template:Cite book</ref>
GNU SETL is a command-line utility that extends and implements SETL.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
ReferencesEdit
Further readingEdit
- Schwartz, Jacob T., "Set Theory as a Language for Program Specification and Programming". Courant Institute of Mathematical Sciences, New York University, 1970.
- Schwartz, Jacob T., "On Programming, An Interim Report on the SETL Project", Computer Science Department, Courant Institute of Mathematical Sciences, New York University (1973).
- Schwartz, Jacob T., Dewar, R.B.K., Dubinsky, E., and Schonberg, E., Programming With Sets: An Introduction to SETL, 1986. Template:ISBN.