Редактирование: МФСП, 06 семинар (от 06 октября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | В прошлый | + | В прошлый рз рссм. лг. спец. Сейчс рссм. импертивный стиль в КЫД, Н ЧёМ ЗНЯТИЯ В КЛССЕ ЗВЕРШ. До этого момент был имплик. стиль, ктрый ближе к функ. прогрммировнию. Д нст. ммент RSL был ближе к функ. пргр. Н исп. RSL, мжно писть спец., близкие к имп. стилю. |
- | + | Нч. с пнятия перем: | |
'''variable''' id : Type = val | '''variable''' id : Type = val | ||
Строка 10: | Строка 10: | ||
r : Nat = 0 | r : Nat = 0 | ||
- | + | Чт миы мжем с переменными делть: | |
* присвоение | * присвоение | ||
id = val | id = val | ||
- | : | + | : Плуч. выр. н длжно иметь тип. Выр. имеет тип 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. |
x = 1; x = x / 2 | x = 1; x = x / 2 | ||
- | + | Знач выр. (), 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() ≡ cnt = cnt + 1; cnt | inc() ≡ cnt = cnt + 1; cnt | ||
- | + | Импер. стиль мжно исп. и ля неявнй спец. Но тут возн. вопрс: нм нужн в пстусл. ссылться н сост. перем кк до, тк и псле. Для этог исп. пстрф: id` — предыдущее сост. переменнй. | |
Пример: | Пример: | ||
Строка 76: | Строка 76: | ||
'''pre''' s ≠ {} | '''pre''' s ≠ {} | ||
- | + | Здчи. | |
- | + | Дпустим, бъявлен '''variable''' x : Int. Для кждого выр. пр. тип и знач. перем. x: | |
x = 1; x = 2 | x = 1; x = 2 | ||
Выр: Unit, (), x ≡ 2 | Выр: Unit, (), x ≡ 2 | ||
Строка 84: | Строка 84: | ||
Выр: Int, 3, x ≡ 2 | Выр: Int, 3, x ≡ 2 | ||
- | + | Пострить явн. спец. в имп. стиле ф-ции _sum, ктря выч. сумму нт. ряд. Для ряд исп. список. | |
- | С | + | С исп. глб. перем: |
'''variable''' | '''variable''' | ||
list : Nat* | list : Nat* | ||
Строка 95: | Строка 95: | ||
'''pre''' l ≤ len list | '''pre''' l ≤ len list | ||
- | С | + | С исп. лк. перем: |
'''variable''' | '''variable''' | ||
list : Nat* | list : Nat* | ||
Строка 109: | Строка 109: | ||
'''pre''' l ≤ len list | '''pre''' l ≤ len list | ||
- | С | + | С исп. while: |
'''variable''' | '''variable''' | ||
list : Nat* | list : Nat* | ||
Строка 124: | Строка 124: | ||
'''pre''' l ≤ len list | '''pre''' l ≤ len list | ||
- | Задача: | + | Задача: постр. опис. стека. |
'''variable''' | '''variable''' | ||
Stack : T* | Stack : T* | ||
Строка 144: | Строка 144: | ||
'''pre''' not isempty(Stack) | '''pre''' not isempty(Stack) | ||
- | + | Специф. пр. выч. в RSL | |
- | + | Нчнём с понятия кнлов. Похже н пнятие перем, но эт не тльдко тчк перед. инф., н и тчк синхр. | |
- | + | Синтксис: | |
'''channel''' | '''channel''' | ||
id : Type, | id : Type, | ||
Строка 154: | Строка 154: | ||
b, c : Int | b, c : Int | ||
- | + | Анлгич. рбте с перем, укз. типы дступ по рбте с кнлми при объявл. функции: | |
'''value''' | '''value''' | ||
p : Unit → '''in''' a '''out''' b Unit | p : Unit → '''in''' a '''out''' b Unit | ||
- | У | + | У нс есть кнл с им. id, и для счит. исп. кнстр. id?. Эт выр. имеет тип тип кнл, и ег можн присв. |
x := c? | x := c? | ||
- | Для | + | Рз мы мжем читть, знчит ни лжны туд кк-т пдтью Для зписи исп. кнстр. id!val. |
a!0 | a!0 | ||
- | Есть | + | Есть кнлы кк т. синхр, есть опер. рбты с кнлми. Н не дшли до пр. выч. |
- | + | Пр. выр. в 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 | ||
* ∅ | * ∅ | ||
- | В | + | В блее слжнм случе: |
(x := c? || c!5) || c!7 | (x := c? || c!5) || c!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 | + | То 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 ≡ x = 2 | x := c! ++ c!e ≡ x = 2 | ||
- | + | Выч. снчл т, кторе мжет вычислиться. В дннм случе эт выр. экв. x := e | |
- | + | Н этй рдужнй нте семинрские здния звершим, и выддим задния. | |
- | Задание | + | Задание либ в метдичке, либо н сйте sp.cs.msu.su/mfsp |
Сдача: | Сдача: | ||
- | * | + | * Снпч. небх. сдть лг. спец. — д1 нября |
- | * | + | * П ней небх. сдть явн-нефвн спец. --- до 1 декбря |
- | * | + | * Пргр. релиз. --- д зч. сессии |
- | + | Прядок сдчи: есть чекре, пкз., чт н не ругется, птм Петрвскму или Глвину её рсск., покз. В эти дни, в этй же удитории. | |
+ | |||
+ | Зсёт без ценки. | ||
+ | |||
+ | <!-- У меня 5 впринт. --> | ||
{{МФСП}} | {{МФСП}} | ||
{{Lection-stub}} | {{Lection-stub}} |