Евгений Котельников. Зависимые типы в HaskellFProg
Системы зависимых типов позволяют оперировать данными на уровне типов, что может значительно повысить точность спецификации программ. Несмотря на отсутствие поддержки самих зависимых типов в Haskell, некоторые их свойства могут быть реализованы с помощью расширений языка. Будет представлен ряд техник, приближающий Haskell к возможностям языков вроде Agda, Coq и Epigram. Доклад имеет вводный характер и не требует предварительных знаний в обсуждаемых в нём темах.
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.
Евгений Котельников. Зависимые типы в HaskellFProg
Системы зависимых типов позволяют оперировать данными на уровне типов, что может значительно повысить точность спецификации программ. Несмотря на отсутствие поддержки самих зависимых типов в Haskell, некоторые их свойства могут быть реализованы с помощью расширений языка. Будет представлен ряд техник, приближающий Haskell к возможностям языков вроде Agda, Coq и Epigram. Доклад имеет вводный характер и не требует предварительных знаний в обсуждаемых в нём темах.
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.
Мы закончили рассмотрение паттернов 64-битных ошибок. Последнее на чем мы остановимся в связи с этими ошибками, является то, как они могут проявляться в программах.
Циклические коды. Проверочный и порождающий многочлены, критерий существования кода с заданным порождающим многочленом. Вид порождающей и проверочной матриц. Систематическое кодирование.
Граница Боуза—Чоудхури—Хоквингема.
Мы закончили рассмотрение паттернов 64-битных ошибок. Последнее на чем мы остановимся в связи с этими ошибками, является то, как они могут проявляться в программах.
Циклические коды. Проверочный и порождающий многочлены, критерий существования кода с заданным порождающим многочленом. Вид порождающей и проверочной матриц. Систематическое кодирование.
Граница Боуза—Чоудхури—Хоквингема.
2. Три вида циклов.
i := a1, a2, s
Условие
тело цикла тело цикла
Условие
Цикл Цикл
Цикл со счетчиком
с постусловием с предусловием
В языке программирования Pascal они
3. нет
i := a1..a2
Цикл со счетчиком да
(с известным числом тело цикла
повторений)
For i:= a1 to a2 do i - параметр цикла, выполняет
роль счетчика;
begin a1 - начальное значение
тело цикла счетчика;
a2 - конечное значение
end; счетчика.
Назад
4.
5. ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ КОМАНД
ОПЕРАТОРА FOR ...TO ...DO...
1.Определяются значения переменных a1 и a2;
2.Переменной i присваивается значение
переменной a1;
3.Проверяется условие выполнения тела цикла
i ≤ a2;
4.Если это условие истинно, то выполняется
тело цикла;
5.Увеличивается значение переменной i на 1;
6.Переход к пункту 3.
Тело цикла будет выполнено a2 – a1 + 1
6. В операторе For ... значение счетчика может
не только увеличиваться, но и уменьшаться.
В этом случае оператор выглядит так:
Условие выполнения тела цикла: i ≥ a1.
Тело цикла будет выполнено a2 – a1 + 1 раз.
7. Задача 1. Написать программу, которая вычисляет
Задача 1. Написать программу, которая вычисляет
сумму положительных из n введенных с
сумму положительных из n введенных с
клавиатуры целых чисел.
клавиатуры целых чисел.
Program summa;
Var i, n, x: integer;
Begin
Writeln (‘ввести количество чисел’);
Readln(n);
s :=0;
For i := 1 to n do
Begin
Writeln(‘ввести число’);
Readln(x);
If x > 0 then s := s + x;
End;
Writeln (‘сумма >0 =‘, s);
Readln;
8. Задача 2.. Написать программу,
Задача 2 Написать программу,
выводящую на экран степени
выводящую на экран степени
числа 2 (от 0 до 10) в виде
числа 2 (от 0 до 10) в виде
таблицы.
таблицы.
Program stepen2;
Var i, x: integer;
Begin
//Вывод поясняющей записи
Writeln (‘Tabliza’);
Writeln (‘---------------------------’);
//Присваивание
x :=1;
//Оператор цикла пересчет
For i := 0 to 10 do
Begin // начало операторных скобок
Writeln (‘2^’, i:2, ‘=‘, x:5); //i:2 означает два пробела до значения i,
соответственно х:5 озночает пять пробелов до переменной х
x := x*2;
Writeln;
End; //конец операторных скобок
End.
9. 1. Сколько раз будет выполнено тело
цикла? Верно:
1. for i:= –5 to 5 do тело цикла; 1. 11 раз
2. for i:= 6 to 2 do тело цикла; 2. 0 раз
3. for i:= 3 to 3 do тело цикла; 3. 1 раз
4. for i:= 3 downto 4 do тело цикла; 4. 0 раз
5. for i:= 3 downto 1 do тело цикла; 5. 3 раза
10. нет
Цикл
Условие
да
с предусловием тело цикла
Тело цикла выполняется,
пока условие
Чтобы не было
зацикливания, переменные,
входящие в условие, должны
изменяться в теле цикла.
Назад
11. Задача 3. Найти количество цифр в введенном с
Задача 3. Найти количество цифр в введенном с
клавиатуры числе ((n > 0).
клавиатуры числе n > 0).
...
Write(‘n=‘);
Readln(n);
m := n; k :=0;
While m <> o do
Begin
m := m div 10;
k := k +1;
End;
Writeln (‘количество цифр в числе‘, n, ‘=‘, k);
End.
12. Цикл Тело цикла
с постусловием Да Нет
Условие
Назад
13. Задача 4.. Найти количество цифр в введенном с
Задача 4 Найти количество цифр в введенном с
клавиатуры числе ((n > 0).
клавиатуры числе n > 0).
Решим эту задачу с оператором Repeat ...
Решим эту задачу с оператором Repeat ...
...
Write(‘n=‘); 1. Операторные скобки (begin ... end)
1. Операторные скобки (begin ... end)
Readln(n); здесь не нужны;
здесь не нужны;
m := n; k :=0;
2. Тело цикла выполнится
2. Тело цикла выполнится
хотя бы раз независимо от
хотя бы раз независимо от
Repeat условия.
условия.
m := m div 10;
k := k +1;
Until m = 0;
Writeln (‘количество цифр в числе‘, n, ‘=‘, k);
Readln;
End.
14. Пусть x и y одновременно не равные нулю
целые неотрицательные числа и пусть x ≥ y.
Если y = 0, то НОД (x, y) = x, а если y ≠ 0,
то для чисел x, y, и r, где r – остаток от деления
x на y, выполняется равенство
НОД (x, y)= НОД(y, r).
Например, пусть x = 48, а y = 18.
НОД(48, 18) = НОД(18, 12) = НОД(12, 6) =
НОД(6, 0) = 6.
15. Начало
x, y Program NOD;
Var x, y : integer;
нет да Begin
x>y
Write(‘vvod x, y’);
y := y mod x x := x mod y Readln (x, y);
Repeat
нет x=0 if x > y then x := x mod y
or
y=0 else y := y mod x
да
Until (x = 0) or (y = 0);
x+y Writeln (‘NOD=‘, x + y);
Readln;
конец
End.
16. начало
x,y Program NOD;
Var x, y : integer;
-
x<>y
Begin
+ Write(‘vvod x, y’);
- + Readln (x, y);
x >y
While x<>y do
if x > y then x := x - y
x:=x-y y:=y-x
else y := y - x
Writeln (‘NOD=‘, x);
End.
NOD
конец