SASL (St. Andrews Static Language)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:31, 8 июня 2016.
SASL (St. Andrews Static Language)
Парадигма Функциональный язык программирования
Спроектировано David Turner (Дэвид Тёрнер)
Под влиянием
ISWIM
Влияние
KRC, Miranda, Haskell

SASL

История

SASL — полностью функциональный язык программирования, разработанный Дэвидом Тёрнером в Сент-Эндрюсском университете в 1972 году, на базе аппликативного подмножества ISWIM. В 1976 Тёрнер перепроектировал его как нестрогий (ленивый) язык. В этой форме SASL стал базой для поздних языков Тэрнера — KRC и Miranda, хотя SASL, по видимому, был бестиповым, а в Miranda наблюдается полиморфизм.

Ленивые вычисления

SASl (как и Miranda, и Haskell) избавилась от императивных особенностей (присваивания и «J») приводя, таким образом, к развитию чисто функциональных языков, в следствии с переключением на ленивые вычисления.

Ленивые вычисления — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления. Отложенные вычисления позволяют сократить общий объём вычислений за счёт тех вычислений, результаты которых не будут использованы. Программист может просто описывать зависимости функций друг от друга и не следить за тем, чтобы не осуществлялось «лишних вычислений».

Описание

SASL представляет собой математическую запись для описания некоторых видов структур данных. Название SASL расшифровывается «St Andrews статический язык «. «Статический» означает, что в отличие от обычных языков программирования, программы SASL не содержат команды и структуры данных, однажды определенные, они не могут быть изменены при последующем выполнении программы. Эта статья предназначены для описания просты SASL, и мотивировании его использования, путем демонстрации некоторых элементарных примеров программ и справочного руководства для пользователя SASL. В SASL «программа » это выражение, описывающая некоторые объекты данных. Если выражение представлено в SASL систему (с завершающим вопросительным знаком), реакция системы - печать представления объекта, описываемого выражением.

Пример 1:
2 + 3
?

SASL это программа, в которой система реагирует на печать

5

Конструкция Where

Немного более сложный пример поможет лучше почувствовать этот язык

Пример 2:
factorial 4 
where  factorial 0 = 1 
             factorial = n * factorial (n - 1)
?

Система реагирует на это выражение, печатая 24 (факториал 4). Значение данной конструкции (называется where-выражение) представляет собой значение выражения до наступления события, указанного в «where». В отличие от случая «+» в первом примере, знание функции факториала не встроены в систему SASL, поэтому за выражением «factorial 4» следует смысловое определение имени «factorial». После where может быть определено любое количество имен. Каждое определение состоит из одного или нескольких предложений.

Каждое предложение - определение может быть прочитано как истинное утверждение, уравнение, связанное с уже определенными объектами. В приведенном выше примере есть два уравнения, обращающиеся к функции факториала «factorial». N во втором является произвольным числом(за исключением нуля, который был предметом рассмотрения первого уравнения). Математически, два уравнения являются достаточными для определения функции факториала - это действительно можно рассматривать как решение уравнений. В вычислительном смысле, каждое предложение можно прочитать, как правило замены, утверждающее, что форму слева, там где это происходит, следует заменить на форму справа. Используем это утверждение на выражении «factorial 4»:

4 * factorial 3
4 * (3 * factorial 2)
4 * (3 * (2 * factorial 1)) 
4 * (3 * (2 * (1 * factorial 0)))
4 * (3 * (2 * (1 * 1)))

В результате этих вычислений получается значение 24. Можно показать, что результат, полученный использованием таких предложений как правил подстановки, всегда совпадает с полученным математическим решением предложений, рассматриваемых как уравнения. В SASL используя конструкций «where» за любым выражением могут следовать определения значений одного или более имён. Так, например, выражение справа от знака «=» по определению само может быть where – выражением. Таким образом, может быть построено выражения произвольной сложности. Пример 3:

binomial (n, 3) + binomial(n, 4) 
where n = 10 
            binomial (n, r) = factorial n/( factorial (n−r) * factorial r)
                                        where factorial  0 = 1 
                                                     factorial n = n* factorial (n − 1) 
?

Пример 3 является суммой биномиальных коэффициентов, выражаемых формулой

формула С103 + С104 . 

def, начальный набор

Вместо сравнивания определений напрямую с выражениями, с использованием WHERE - конструкции, зачастую удобнее добавлять их в среду, в которой все выражения посчитаны. Это делается при помощи объявлении формы определений Def (т.е. завершается вопросительным знаком). Так, например, сутью примера 4

def 
factorial 0 = 1
factorial n  = n * factorial (n-1)
?

является добавление определению функции «factorial» в глобальную среду. Существует довольно богатая среда стандартных функций, которая устанавливается автоматически в начале каждого сеанса SASL с помощью набора определений, известного как начальный SASL набор.

Ссылки

[1] P JLandin "Следующее 700 языков программирования" CACMVol 9, № 3 (март 1966)

[2] W HBurge "Техники рекурсивного программирования" Addison-Wesley1975

[3] (ред) Дарлингтон, Хендерсон, Тернера "Функциональное программирование и его применение" Cambridge университета. 1982объекта описывается выражением.