Сетл | |
---|---|
Класс языка | язык программирования |
Появился в | 1969 |
Разработчик | Курантовский институт математических наук |
Сайт | setl.org |
Сетл (SETL; от англ. set language — язык множеств) — язык программирования, ориентированный на работу со множествами, разработанный в конце 1960-х годов группой профессора Нью-йоркского университета Джекоба Шварца.
Синтаксические конструкции языка содержат операции, позволяющие манипулировать со множествами — включение, исключение, проверка принадлежности, кванторы всеобщности и существования, итераторы, позволяющие обрабатывать каждый элемент множества и так далее. Кроме множеств, язык поддерживает работу с упорядоченными множествами — кортежами.
Широкого распространения язык не получил, но был определённый всплеск популярности в 1970-е — 1980-е годы в Советском Союзе: во время визита в СССР в 1972 году Шварц сумел заинтересовать языком ряд разработчиков из Новосибирска, что положило начало нескольким годам сотрудничества между нью-йоркской и новосибирской группами программистов и математиков. В результате язык был реализован на БЭСМ-6, ЕС ЭВМ, НОРД[1], работы над языком продолжались до 1985—1989 годов, активно применялся в исследованиях по тематике искусственного интеллекта. Идеи Сетла заимствованы в учебном языке Рапира и языке Старсет (ИПС РАН, 1991).
В США язык был реализован на машинах компании Burroughs. Использовался в ранних реализациях компилятора Ады.
Во конце 1990-х годов в Нью-Йоркском университете создана вторая версия языка — SETL2, обратно совместимая с оригинальным вариантом.
Ряд идей языка воплощены в современных языках программирования, среди них — прямой предшественник Python язык ABC[2].
Одна из особенностей языка — одна из первых реализаций нотации спискового включения; например, для печати всех простых чисел от 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]