Сетл (SETL; от — язык множеств) — язык программирования, ориентированный на работу со множествами, разработанный в конце 1960-х годов группой профессора Нью-йоркского университета Джекоба Шварца.
Синтаксические конструкции языка содержат операции, позволяющие манипулировать со множествами — включение, исключение, проверка принадлежности, кванторы всеобщности и существования, итераторы, позволяющие обрабатывать каждый элемент множества и так далее. Кроме множеств, язык поддерживает работу с упорядоченными множествами — кортежами.
Широкого распространения язык не получил, но был определённый всплеск популярности в 1970-е — 1980-е годы в Советском Союзе: во время визита в СССР в 1972 году Шварц сумел заинтересовать языком ряд разработчиков из Новосибирска, что положило начало нескольким годам сотрудничества между нью-йоркской и новосибирской группами программистов и математиков. В результате язык был реализован на БЭСМ-6, ЕС ЭВМ, НОРД, работы над языком продолжались до 1985—1989 годов, активно применялся в исследованиях по тематике искусственного интеллекта. Идеи Сетла заимствованы в учебном языке Рапира и языке Старсет (ИПС РАН, 1991).
В США язык был реализован на машинах компании Burroughs. Использовался в ранних реализациях компилятора Ады.
Во конце 1990-х годов в Нью-Йоркском университете создана вторая версия языка — SETL2, обратно совместимая с оригинальным вариантом.
Ряд идей языка воплощены в современных языках программирования, среди них — прямой предшественник Python язык ABCPython'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! — Guido van Rossum, .
Примеры Одна из особенностей языка — одна из первых реализаций нотации спискового включения; например, для печати всех простых чисел от 2 до N применяется следующее выражение: print([n in [2..N] | forall m in {2..n - 1} | n mod m > 0])
Поддерживается традиционная процедурная нотация, например, для вычисления факториала: procedure factorial(n); return if n = 1 then 1 else n * factorial(n - 1) end if; end factorial; при этом благодаря наличию операций свёртки над типами-множествами выражение для факториала можно записать компактно: */[1..n]
Примечания
Литература 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. ISBN 0-387-96399-5. Давид Яковлевич Левин, Александр Семенович Нариньяни. Развитая СУБД как многоуровневая система на основе языка СЕТЛ. 22 с 20 см. Новосибирск ВЦ СО АН СССР 1982. Язык сверхвысокого уровня СЕТЛ и его реализация (для ЭВМ БЭСМ-6) / Д. Я. Левин ; Отв. ред. А. П. Ершов 160 с 20 см Новосибирск Наука Сиб. отд-ние 1983
Ссылки SETL binary distribution for UNIX Programming on SETL and other things SETL documentation The SETL programming language, by Robert Dewar Д. Я. Левин. СЕТЛ: Реализация и применение теоретико-множественного языка программирования Архив академика Ершова. Материалы, связанные с Сетл
__NOTOC__