SETL

SETL（SET语言）是一种基于数学集合论的领域特定的高级编程语言。它最初由（Jack）Jacob T. Schwartz于二十世纪六十年代末在纽约大学科朗数学研究所开发。

 设计 
SETL提供两种基本的聚合数据类型：无序的集合和序列（后者也称为元组）。集合和元组的元素可以是任意类型，包括集合和元组本身。映射是作为有序对（长度为2的元组）的集合提供的，并且可以具有任意的域和范围类型。SETL中的原始操作包括集合成员资格、联合、交集和幂集构造等。 

SETL提供使用一阶谓词逻辑的全称和存在量词构造的量化布尔表达式。 

SETL提供了几个迭代器，可以在聚合数据结构上生成各种循环。

 例子 
打印从2到N的所有素数：
 print([n in [2..N] | forall m in {2..n - 1} | n mod m > 0]);
这个表示法类似于列表推导式。

阶乘过程的定义：
 procedure factorial(n); -- calculates the factorial n!
   return if n = 1 then 1 else n * factorial(n - 1) end if;
 end factorial;

阶乘(n > 0)的更常用的SETL表达：
 */[1..n]

 用途 
在二十世纪七十年代，SETL被移植到BESM-6，ES EVM和其他俄罗斯的计算机系统。 

SETL用于早期实现编程语言Ada，名为NYU Ada / ED翻译器。这后来成为第一个经过验证的Ada实现，于1983年4月11日通过认证。 

根据吉多·范罗苏姆的说法，Python的先驱语言ABC，受到了SETL的启发：“兰伯特梅尔滕斯在纽约大学的SETL小组工作了一年，然后才开始进行最终的ABC设计！”

 语言变种 
“SET语言2”（SETL2）是SETL的一个不向后兼容的后继者，由纽约大学Courant数学科学研究所的柯克斯奈德于二十世纪八十年代后期创建。与其前身一样，它基于有限集的理论和符号，但也受到Ada语言的语法和风格的影响。 

“交互式SET语言”（ISETL）是离散数学中使用的SETL变体。

 参考 

 进一步阅读 
 Schwartz，Jacob T.，“将集合论用作程序规定和编程的语言”。 纽约大学Courant数学科学研究所，1970年。 
 Schwartz，Jacob T.，“关于编程，关于SETL项目的中期报告”，计算机科学系，Courant数学科学研究所，纽约大学（1973）。 
 Schwartz，Jacob T.，Dewar，RBK，Dubinsky，E。和Schonberg，E。， Programming With Sets：An Introduction to SETL ，1986。  国际标准书号   0-387-96399-5 。

 外部链接 

   ，GNU SETL 
 在SETL和其他东西上编程 

Category:程序设计语言
Category:学术的编程语言
Category:集合论