Редактирование: МФСП, 06 семинар (от 06 октября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
-
В прошлый раз были рассмотрены алгебраические спецификации. Сейчас рассмотрим императивный стиль в RSL, на чём занятия в классе завершаются. До этого момент был импл. стиль, который ближе к функциональному программированию. До настоящего момента RSL был ближе к функциональному программированию. Используя RSL, можно записать спецификации, близкие к императивному стилю.
+
В прошлый рз рссм. лг. спец. Сейчс рссм. импертивный стиль в КЫД, Н ЧёМ ЗНЯТИЯ В КЛССЕ ЗВЕРШ. До этого момент был имплик. стиль, ктрый ближе к функ. прогрммировнию. Д нст. ммент RSL был ближе к функ. пргр. Н исп. RSL, мжно писть спец., близкие к имп. стилю.
-
Начнём с понятия переменной:
+
Нч. с пнятия перем:
'''variable''' id : Type = val
'''variable''' id : Type = val
Строка 10: Строка 10:
r : Nat = 0
r : Nat = 0
-
Что мы можем с переменными делать:
+
Чт миы мжем с переменными делть:
* присвоение
* присвоение
id = val
id = val
-
: Получаемое выражение не должно иметь тип. Выражение имеет тип Unit.
+
: Плуч. выр. н длжно иметь тип. Выр. имеет тип Unit.
-
Имея переменные и присваивания для них, мы хотим чт-то делать. Хотим функции.
+
Имея перем и присв. для них, мы хтим чт-т делть. Хтим функции.
-
Функции описываются следующим образом:
+
Функции пис. след. брзм:
'''value'''
'''value'''
f1 : Unit → '''write''' n, b '''read''' a, r Nat
f1 : Unit → '''write''' n, b '''read''' a, r Nat
-
В императивном стиле функции, которые читают и пишут глобальные переменные называются функции с глобальным эффектом. Они обычно переменных не имеют (?).
+
В имп. стиле функции, котрые чит. и пишут. глб. перем. нз. функции с глоб эффектом. ни бычно прм. не имеют.
-
Составные операции:
+
Сст перции:
expr1, expr2, expr3
expr1, expr2, expr3
-
Результат тип посл выр.
+
Результт тип посл выр.
x = 1; x
x = 1; x
-
В результате значение выражения 1, x становится равным 1.
+
В результте знч. выр. 1, x стнвится рвным 1.
x = 1; x = x / 2
x = 1; x = x / 2
-
Значение выражения (), x ≡ 0.5
+
Знач выр. (), x ≡ 0.5
-
if императивный:
+
if импертивный:
'''if''' val '''then''' expr1 (типа Unit)
'''if''' val '''then''' expr1 (типа Unit)
'''else''' expr2 (типа Unit)
'''else''' expr2 (типа Unit)
Строка 44: Строка 44:
'''do''' unit_expr '''until''' bool_val '''end'''
'''do''' unit_expr '''until''' bool_val '''end'''
-
for применим только для списочных структур:
+
for пр. тльк для спис. структур:
'''for''' list_limit '''do''' unit_expr '''end'''
'''for''' list_limit '''do''' unit_expr '''end'''
Строка 50: Строка 50:
'''for''' i in <1..n> '''do''' x=x+i '''end'''
'''for''' i in <1..n> '''do''' x=x+i '''end'''
-
Переменные могут быть объявлены как локальные, тогда их область видимости будет ограничена:
+
Переменные могут быть бъявл. как локльные, тогд их бл. видимости будет огр.
'''local'''
'''local'''
'''variable''' x : Type, ...
'''variable''' x : Type, ...
Строка 57: Строка 57:
'''end'''
'''end'''
-
Импл. запись можно использовать как для явного так и для неявного описания функций.
+
Имплик. зпись мжно исп. кк для явнго тк и для неявнго опис. функций.
Пример:
Пример:
Строка 65: Строка 65:
inc() &equiv; cnt = cnt + 1; cnt
inc() &equiv; cnt = cnt + 1; cnt
-
Императивный стиль можно использовать и для неявной спецификации. Но тут возникает вопрос: нам нужно в постусловии ссылаться на состояние переменной как до, так и после. Для этого используется апостроф: id` — предыдущее состояние переменной.
+
Импер. стиль мжно исп. и ля неявнй спец. Но тут возн. вопрс: нм нужн в пстусл. ссылться н сост. перем кк до, тк и псле. Для этог исп. пстрф: id` — предыдущее сост. переменнй.
Пример:
Пример:
Строка 76: Строка 76:
'''pre''' s &ne; {}
'''pre''' s &ne; {}
-
Задачи.
+
Здчи.
-
Допустим, объявлена '''variable''' x : Int. Для каждого выражения определим тип и значение переменной x:
+
Дпустим, бъявлен '''variable''' x : Int. Для кждого выр. пр. тип и знач. перем. x:
x = 1; x = 2
x = 1; x = 2
Выр: Unit, (), x &equiv; 2
Выр: Unit, (), x &equiv; 2
Строка 84: Строка 84:
Выр: Int, 3, x &equiv; 2
Выр: Int, 3, x &equiv; 2
-
Построить явную спецификацию в императивном стиле функции _sum, которая вычисляет сумму натурального ряда. Для ряда использовать список.
+
Пострить явн. спец. в имп. стиле ф-ции _sum, ктря выч. сумму нт. ряд. Для ряд исп. список.
-
С использованием глобальных переменных:
+
С исп. глб. перем:
'''variable'''
'''variable'''
list : Nat*
list : Nat*
Строка 95: Строка 95:
'''pre''' l &le; len list
'''pre''' l &le; len list
-
С использованием локальных переменных:
+
С исп. лк. перем:
'''variable'''
'''variable'''
list : Nat*
list : Nat*
Строка 109: Строка 109:
'''pre''' l &le; len list
'''pre''' l &le; len list
-
С использованием while:
+
С исп. while:
'''variable'''
'''variable'''
list : Nat*
list : Nat*
Строка 124: Строка 124:
'''pre''' l &le; len list
'''pre''' l &le; len list
-
Задача: построить описание стека.
+
Задача: постр. опис. стека.
'''variable'''
'''variable'''
Stack : T*
Stack : T*
Строка 144: Строка 144:
'''pre''' not isempty(Stack)
'''pre''' not isempty(Stack)
-
== Спецификация параллельных вычислений в RSL ==
+
Специф. пр. выч. в RSL
-
Начнём с понятия каналов. Похоже на пнятие переменной, но это не только точка передачи информации, но и точка синхронизации.
+
Нчнём с понятия кнлов. Похже н пнятие перем, но эт не тльдко тчк перед. инф., н и тчк синхр.
-
Синтаксис:
+
Синтксис:
'''channel'''
'''channel'''
id : Type,
id : Type,
Строка 154: Строка 154:
b, c : Int
b, c : Int
-
Аналогично работе с переменными, указ. типы доступны по работе с каналами при объявлении функции:
+
Анлгич. рбте с перем, укз. типы дступ по рбте с кнлми при объявл. функции:
'''value'''
'''value'''
p : Unit &rarr; '''in''' a '''out''' b Unit
p : Unit &rarr; '''in''' a '''out''' b Unit
-
У нас есть канал с именем id, и для считывания используется конструкция id?. Это выражение имеет тип канал, и его можно присваивать.
+
У нс есть кнл с им. id, и для счит. исп. кнстр. id?. Эт выр. имеет тип тип кнл, и ег можн присв.
x := c?
x := c?
-
Для записи используется конструкция id!val.
+
Рз мы мжем читть, знчит ни лжны туд кк-т пдтью Для зписи исп. кнстр. id!val.
a!0
a!0
-
Есть каналы кк т. синхронизации, есть операции работы с каналами. Но не дошли до параллельных вычислений.
+
Есть кнлы кк т. синхр, есть опер. рбты с кнлми. Н не дшли до пр. выч.
-
Параллельное вычисление в rsl формулируется следующим образом: есть expr1, expr2. Можно специфицировать, что они вычисляют параллельно: expr1 . expr2, где точка может иметь следующий вид:
+
Пр. выр. в rsl форм. след. брзом: есть expr1, expr2. Мжн спец., чт они выч. прллельно: expr1 . expr2, где тчк мжет иметь след. вид:
-
* || — параллельная композиция
+
* || — прллельня компзиция
-
* [] (прямоугльник) — внешний выбор
+
* [] (прямоугльник) — внеш. выбор
-
* П (прямоугольник без нижнего ребра) — внутренний выбор
+
* П (прямроуг. без ниж. ребра) — внутр. выбор
-
* ++ (перечёркнутый прямоугольник) — взаимная блокировка.
+
* ++ (перечёрк. прямый) — взаимня блкировка.
Пусть есть
Пусть есть
Строка 175: Строка 175:
'''variable''' x : Int
'''variable''' x : Int
-
И записана конструкция:
+
И зписн констр:
x := c? || c!5
x := c? || c!5
-
При этом мы не можем гарантировать порядок взаимодействий. Какие могут быть варианты:
+
При этм мы не мжем не гр ни прядок, ни взимод. Какие мгут быть вринты:
* x = 5
* x = 5
* &empty;
* &empty;
-
В более сложном случае:
+
В блее слжнм случе:
(x := c? || c!5) || c!7
(x := c? || c!5) || c!7
-
Для такого выражения x может стать равным и 5, и 7, и ничему.
+
Для тког выр. x мжет стть рвным и 5, и 7, и ничему.
-
внешний выбор:
+
неш. выбр:
x := c? [] d!5
x := c? [] d!5
-
Внешний выбор означает, что вычисляется та часть выражения, для которой есть условия вычисления, заданные извне. Если мы допишем такое условие:
+
Внеш. выбор. зн., чт выч. т чсть выр., для ктрой есть усл. выч., здння извне. Если мы дпишем тке условие:
(x := c? [] d!5) || c!1
(x := c? [] d!5) || c!1
-
То x присвоится 1.
+
То x присвится 1.
-
В случае с П показываем, что внешний выбор неважен, и тогда x может быть равным 1 или не может.
+
В случе с П пкзывем, что внеш. выбр невжен, и тогд x мжет быть рвным 1 или не мжет.
(x := c? П d!5) || c!1
(x := c? П d!5) || c!1
-
Взаимная блокировка.
+
Взимня блкировка.
'''channel''' c : T
'''channel''' c : T
'''variable''' x : T
'''variable''' x : T
'''value''' e : T
'''value''' e : T
-
И такое выражение:
+
И тке выржение:
x := c! ++ c!e &equiv; x = 2
x := c! ++ c!e &equiv; x = 2
-
Вычислим сначала то, которое может вычислиться. В данном случае это выражение эквивалентно x := e
+
Выч. снчл т, кторе мжет вычислиться. В дннм случе эт выр. экв. x := e
-
На этой радужной ноте семинарские занятия завершим, и выдадим задания.
+
Н этй рдужнй нте семинрские здния звершим, и выддим задния.
-
Задание либо в методичке, либо на сайте sp.cs.msu.su/mfsp
+
Задание либ в метдичке, либо н сйте sp.cs.msu.su/mfsp
Сдача:
Сдача:
-
* Сначала необходимо сделать алгебраическую спецификацию до 1 ноября
+
* Снпч. небх. сдть лг. спец. д1 нября
-
* По ней необходимо сделать явную-неявную спецификацию --- до 1 декабря
+
* П ней небх. сдть явн-нефвн спец. --- до 1 декбря
-
* Программирование реализации --- до зачётной сессии
+
* Пргр. релиз. --- д зч. сессии
-
Зачёт без оценки.
+
Прядок сдчи: есть чекре, пкз., чт н не ругется, птм Петрвскму или Глвину её рсск., покз. В эти дни, в этй же удитории.
 +
 
 +
Зсёт без ценки.
 +
 
 +
<!-- У меня 5 впринт. -->
{{МФСП}}
{{МФСП}}
{{Lection-stub}}
{{Lection-stub}}

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы