You can edit almost every page by Creating an account. Otherwise, see the FAQ.

# SETL

Paradigm multi-paradigm: imperative, procedural, structured, object-oriented (Jack) Jacob T. Schwartz Courant Institute of Mathematical Sciences 1969; 55 years ago 1.1 / January 7, 2005; 19 years ago Dynamic setl.org ALGOL 60 SETL2, ISETL, SETLX, Starset, ABC

Search SETL on Amazon.

SETL (SET Language) is a very high-level programming language based on the mathematical theory of sets. It was originally developed by (Jack) Jacob T. Schwartz at the New York University (NYU) Courant Institute of Mathematical Sciences in the late 1960s.

## Design

SETL provides two basic aggregate data types: unordered sets, and sequences (the latter also called tuples). The elements of sets and tuples can be of any arbitrary type, including sets and tuples themselves. Maps are provided as sets of pairs (i.e., tuples of length 2) and can have arbitrary domain and range types. Primitive operations in SETL include set membership, union, intersection, and power set construction, among others.

SETL provides quantified boolean expressions constructed using the universal and existential quantifiers of first-order predicate logic.

SETL provides several iterators to produce a variety of loops over aggregate data structures.

## Examples

Print all prime numbers from 2 to N:

```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]
```

## Uses

Implementations of SETL were available on the DEC VAX, IBM/370, SUN workstation and APOLLO.[1] In the 1970s, SETL was ported to the BESM-6, ES EVM and other Russian computer systems.[2]

SETL was used for an early implementation of the programming language Ada, named the NYU Ada/ED translator.[3] This later became the first validated Ada implementation, certified on April 11, 1983.[4]

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!"[5]

## Language variants

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

Interactive SET Language (ISETL) is a variant of SETL used in discrete mathematics.

GNU SETL is a command-line utility that extends and implements SETL.

## References

1. J.T. Schwartz; R.B.K. Dewar; E. Dubinsky; E. Schonberg (1986). Programming with sets. An Introduction to SETL. Springer-Verlag New York Inc. ISBN 978-1-4613-9577-5. Search this book on
2. И.В. Поттосин, ed. (2001). Становление новосибирской школы программирования (мозаика воспоминаний) [Formation of the Novosibirsk school of programming (mosaic of memories)] (PDF) (in русский). Новосибирск: Институт систем информатики им. А. П. Ершова СО РАН. pp. 106–113. Search this book on
3. Dewar, Robert B. K.; Fisher Jr., Gerald A.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (November 1980). "The NYU Ada Translator and Interpreter". ACM SIGPLAN Notices - Proceedings of the ACM-SIGPLAN Symposium on the Ada Programming Language. 15 (11): 194–201. doi:10.1145/948632.948659. ISBN 0-89791-030-3. Unknown parameter `|s2cid=` ignored (help)
4. SofTech Inc., Waltham, MA (1983-04-11). "Ada Compiler Validation Summary Report: NYU Ada/ED, Version 19.7 V-001". Archived from the original on June 7, 2017. Retrieved 2010-12-16. Unknown parameter `|url-status=` ignored (help)CS1 maint: Multiple names: authors list (link)
5. Python-Dev: SETL (was: Lukewarm about range literals)