code concept of UiUa #1
концепция программирования на uiua
https://www.uiua.org/pad
概念
番組
概念
1
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
https://www.
uiua.org/pad
code concept of UiUa
code 00: быстрый тур
союз двух парадигм: массив и стек
top at top | top at bottom
положить на стек 4, 3, 2, 1, +, +, *
положить на стек 3, продублировать, *
положить на стек 225, продублировать, корень
положить на стек 10, 3, вычесть 10-3=7
положить на стек 10, 30, поменять, вычесть
code concept of UiUa
code 00: быстрый тур
положить 3, 2, 1, минус 4
какой ответ и что такое ?
положить массив [1 2 3 4]
какой ответ?
какой ответ?
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
code concept of UiUa
code 00: быстрый тур
функция это привязка, у которой не достаточно аргументов
code concept of UiUa
code 00: быстрый тур
модификаторы это функции, которые принимают функции как аргументы
в чем разница?
в чем разница?
code concept of UiUa
code 00: быстрый тур
работают с 1 аргументом
работают с 2 аргументами
в чем разница?
в чем разница?
code concept of UiUa
code 00: быстрый тур
иногда стандартных функций не хватает
😭
code concept of UiUa
code 00: быстрый тур
не надо скобки
надо скобки
Fill выравнивает массив, добавляя значения
box помещает каждое значение в коробочку
code concept of UiUa
code 00: быстрый тур
inventory достает из коробки, дает дорогу функциям, а потом снова упаковывает результат обратно в коробку
что такое инверсия для функции?
code concept of UiUa
code 00: быстрый тур
и
нверсия есть, если функция от 1-го аргумента
кто
такая
code concept of UiUa
code 00: быстрый тур
если у функции 2 аргумента, то инверсия через anti
Kate
Beckinsale
UNDER: ВЗЯЛ, СДЕЛАЛ, ВЕРНУЛ
code concept of UiUa
code 01: введение
1. императивное
2. объектно-ориентированное
3. функциональное
4. декларативное
5. логическое
6. событийное
7. параллельное
8. структурное
9. мета-программирование
Kate
Beckinsale
code concept of UiUa
code 01: введение
тип программирования
1. программирование массивов
2. программирование неявное
3. программирование стековое
почему это круто
1. массивы машинно-независимы
2. операции в массивах векторные
3. есть 1 структура для работы
4. есть 1 глиф для 1 алгоритма
code concept of UiUa
code 02: операции со стеком
операции справа налево, код сверху вниз
код форматируется
пробелы не обязательны, имена можно не дописывать
белые глифы для стека
code concept of UiUa
code 02: операции со стеком
отбросить верхнее значение стека
распечатать состояние стека
https://www
.uiua.org/tutorial/basic
ничего не делать
code concept of UiUa
code 02: операции со стеком
code concept of UiUa
code 03: математика и сравнения
монадическая функция
диадическая функция
https://www
.uiua.org/tutorial/math
code concept of UiUa
code 03: математика и сравнения
code concept of UiUa
code 04: массивы
базовые сведения
1. uiua это язык массивов (array language)
2. одна команда применяется ко всему массиву
code concept of UiUa
code 04: массивы
у каждого массива есть форма, размер по осям
rows
columns
code concept of UiUa
code 04: массивы
0 = scalar
1 = vector
2 = matrix
≥
3 = no name
first element form
1. first element exist always
2. first element = first line array
code concept of UiUa
code 04: массивы
what is the first element of the form?
shape ШЕЙП
length ЛЕНГТХ
rang РАНГ
beautiful array output
beautiful array output
code concept of UiUa
code 04: массивы
Most operations are distributed
but there is one condition
the first elements must match
code concept of UiUa
code 04: массивы
array alignment
couple
first
last
reverse
rotate
rotate
deshape
take
drop
code concept of UiUa
code 04: массивы
pick row #2
pick row #3
pick row #2
pick row #[1][1]
select rows by list index
code concept of UiUa
code 04: массивы
замечания
1. все массивы плоские (прямоугольные)
2. все массивы однородные (внутри элементы 1-го типа)
3.официально нельзя построить [[1 2] [1 2 3]]
4. неофициально можно (поместить в коробочку)
array
pack array
unpack array
code concept of UiUa
code 04: массивы
all will work if you change the array type for country names
functions working to the box may ask to put arguments in the box
code concept of UiUa
code 04: массивы
what is the difference
what is the difference
code concept of UiUa
code 04: массивы
https://www.uiua.org/tutorial/arrays
code concept of UiUa
code 04: массивы
code concept of UiUa
code 04: массивы
code concept of UiUa
code 05: типы данных
comments
1. all values inside uiua its arrays
2. each array has its own type
3. inside an array you can't have different types
types
1. numbers
2. complex
3. characters
4. box
code concept of UiUa
code 05: типы данных
numbers
1. это десятичные числа в формате ieee-754
2. числа могут быть дробные n/m (например, 1/3)
3. числа могут быть бесконечные (например,
∞
)
code concept of UiUa
code 05: типы данных
standard form
polar form
vector form
complex
1. это комплексные числа
code concept of UiUa
code 05: типы данных
characters
1. символы задаются как 32-bit unicode
2. escape-символы экранируются
3. строки это массивы с rang=1
code concept of UiUa
code 05: типы данных
нельзя
code concept of UiUa
code 05: типы данных
box
1. это коробка для любого массива (□ или {})
2. внутри массива может быть любое число коробок
3. box это "универсальный тип" (внутри что угодно)
4. box это "универсальный тип" (ее куда угодно)
нельзя
code concept of UiUa
code 05: типы данных
when will the array be in a box union?
empty array = 0, 1, 2, 3 types
https://www.uiua.org/tutorial/types
code concept of UiUa
code 05: типы данных
code concept of UiUa
code 06: привязки
bindings
1. привязки это глобальные имена значений
2. имена привязок большими или маленькими буквами
3. нельзя использовать символ "_" и цифры 0-9
4. можно использовать индексы (ААА__1 = AAA₁)
5. правило #1: имя функции пишется в два слова
6. правило #2: имя функции != стандартному
7. правило #3: если у привязки (код), то это функция
8. если данных недостаточно, то привязка = функция
переменных
code concept of UiUa
code 06: привязки
code concept of UiUa
code 07: модификаторы и функции
function
1. привязка, которая требует аргумента
modifier
1. функция, у которой аргумент = функция
code concept of UiUa
code 07: модификаторы и функции
green = function 1 args
blue = function 2 args
yellow = modifier 1 args
purple = modifier 2 args
code concept of UiUa
code 07: модификаторы и функции
info
1. функции можно создать, окружив код скобками
2. обычно это надо, если нужна запись: f1, f2, f3, ...
3. допустим, нам надо обработать массив: a) взять копию каждой строки, B) развернуть задом наперед, c) сложить с изначальной строкой
[3 5 2]
[2 5 3] + [3 5 2]
[5 10 5]
code concept of UiUa
code 07: модификаторы и функции
info
1. функции могут быть записаны в несколько строк
2. порядок выполнения не такой как у массива
array: 9-8-7 6-5-4 3-2-1
function: 3-2-1 6-5-4 9-8-7
code concept of UiUa
code 07: модификаторы и функции
rare
1. first line function ###
2. last line function ##
concept
1. привязки только глобальные
2. внутри функции нет привязок
3. код без упоминания аргументов
4.
неявный код
code concept of UiUa
code 07: модификаторы и функции
info
1. если перед строкой $, то это форматированная строка
2. форматированная строка это особый вид функции
3. внутри такой строки должен быть _
4. между $ и строкой нет пробела
code concept of UiUa
code 07: модификаторы и функции
code concept of UiUa
code 07: модификаторы и функции
info
1. bindings and functions have "signature stack"
2. N = elements in stack, M = elements return in stack
3. if not M, then m=1
https://www.uiua.org/tutorial/functions
code concept of UiUa
code 07: модификаторы и функции
code concept of UiUa
code 08: манипуляции со стеком
info
1. в языке uiua нет локальных переменных
2. манипуляции по стеком очень простые
. , :
duplicate
DELETE
😀
flip
fork
1. принимает 2 функции
2. вызывает их для 1 набора
2 function (2 args)
2 function (2 args)
4 function (2 args)
code concept of UiUa
code 08: манипуляции со стеком
по индексу=2 лежит 3
команда drop отбрасывает 2 элемента
команда take берет 2 элемента
команда rotate сдвигает 2 элемента
both
1. вызывает функцию с 2 наборами данных
code concept of UiUa
code 08: манипуляции со стеком
bracket
1. вызывает функцию с разными наборами данных
2
1
2
1
code concept of UiUa
code 08: манипуляции со стеком
fork
both
bracket
plus minus
reverse
reverse
plus
minus
code concept of UiUa
code 08: манипуляции со стеком
это пакет
(1+2 | 3*4)
это пакет
(12+2 | 12-2 | 12*2 | 12%2)
это модификатор dip (временный подъем)
code concept of UiUa
code 08: манипуляции со стеком
индексы это сахар
два магнита это напряг
solar system concept
code concept of UiUa
code 08: манипуляции со стеком
отбросить верхнее число со стека
ничего не делать с числом
временно снять, вызвать F, вернуть назад
отбросить верхнее число, вызвать F
этот матрос утонул
этот матрос стоит и ничего не делает
матрос залез в люк и орет, потом вылезет
матрос убегает и орет
☠️
☠️
❤️
code concept of UiUa
code 08: манипуляции со стеком
задача
1. на стеке лежат числа 2, 5, 10
2. найти сумму этих чисел
3. оставить на стеке 2 и 3 число
4. и все числа в массив
simple sample
задача
1. дана функция
2. вычислить (25)
code concept of UiUa
code 08: манипуляции со стеком
1
2
1*2
top
code concept of UiUa
code 08: манипуляции со стеком
замечание
1. очень часто у нас ситуация
2. допустим, надо получить массив n чисел 0-1
задача
1. дано два числа n, m
2. получить список n, n+1, n+2, ..., m-1
code concept of UiUa
code 08: манипуляции со стеком
first args back in stack
left
second args back in stack
right
задача
1. дан какой-то массив чисел 1,2,3,4,...
2. преобразовать его 0-1
задача
1. дано число 5 и какой-то массив чисел
2. преобразовать его в массив чисел > 5
https://www.uiua.org/tutorial/morestack
code concept of UiUa
code 08: манипуляции со стеком
code concept of UiUa
code 08: манипуляции со стеком
code concept of UiUa
code 09: инверсии
info
1. инверсия это вызов обратной функции
2. инверсия это отмена действия функции
инвертирует функцию
what?
code concept of UiUa
code 09: инверсии
создает массив индексов
инвертирует функцию
с аргументами
тут все понятно
тут совсем не понятно
можно всегда и при любых операциях
code concept of UiUa
code 09: инверсии
инвертирует function
1-ый операнд constant
убейте меня
убейте меня
убейте меня
получает f, g делает f, g, анти-f
отслеживает контекст, в котором вызвана
code concept of UiUa
code 09: инверсии
normal code
normal code
задача
1. есть массив чисел [1 2 3 4 5]
2. изменить 2-ой элемент на бесконечность
code concept of UiUa
code 09: инверсии
убейте меня
убейте меня
убейте меня
убейте меня
code concept of UiUa
code 09: инверсии
code concept of UiUa
code 09: инверсии
1. этот шаблон дает доступ к части отмененной функции
2. работает только для монадических функций
изменить значение
установить значение
установить значение
create anti function self
handmake
code concept of UiUa
code 09: инверсии
sample
1. let's say there is a linear interpolation function
2. need to find the value of a point in the interval
not working
function
anti-function
https://www.uiua.org/tutorial/inverses
code concept of UiUa
code 09: инверсии
code concept of UiUa
code 10: поток управления
any language, any style, 10 min
code concept of UiUa
code 10: поток управления
function + number + start number
function + condition
repeat
function
how many
number
code concept of UiUa
code 10: поток управления
code concept of UiUa
code 10: поток управления
function 1, function 2: отлавливаем ошибки
попытка распарсить "100"
попытка распарсить "apple"
попытка распарсить "100apple"
попытка распарсить "0"
selector: (n1) (n2) (n3) index
code concept of UiUa
code 10: поток управления
info
1. all line must change stack
2. all line return equals nums
3. all line must have signatures
2*3=
6, 4
nothing action
2+3+4=
9
,2*3=
6
all work
code concept of UiUa
code 10: поток управления
recursion
1. функция, которая ссылается на свое имя
2. функция, которая должна иметь базовый случай
error, if condition not true
https://www.uiua.org/tutorial/controlflow
code concept of UiUa
code 10: поток управления
code concept of UiUa
code 11: сопоставление с образцом
ok, not problem
error,
Pattern match failed
=2, на что указывает планета
error, паттерны не совпадают
code concept of UiUa
code 11: сопоставление с образцом
ok
error
ok
error
ok
задача
1. дана строка = название города
2. если город на М, то вернуть 100
3. если город на P, то вернуть 200
4. иначе вернуть 300
marcel
paris
code concept of UiUa
code 11: сопоставление с образцом
https://www.uiua.org/tutorial/patternmatching
code concept of UiUa
code 11: сопоставление с образцом
code concept of UiUa
code 12: расширенное управление массивами
+add all elements
+add all elements rows
+add all elements table
1. if shape array1 != shape array2 then error
2. if shape array1 = 1 then not error
code concept of UiUa
code 12: расширенное управление массивами
no problem
no problem
[3 2 2]
[3 2]
[1 2]
задача
1. даны два массива [1 2 3], [4 5 6]
2. создать из них массив
code concept of UiUa
code 12: расширенное управление массивами
мы работает со строками: 1-4-8-10,2-5-8-11, ...
мы объединяем 4 компонента: a-b-c-d
мы вызываем 3 функции для 2 элементов
схема отбора: простой-фикс-фикс-простой
code concept of UiUa
code 12: расширенное управление массивами
what is the difference between?
https://www.uiua.org/tutorial/morearray
code concept of UiUa
code 12: расширенное управление массивами
code concept of UiUa
code 13: думая "по-массивски"
info
1. во многих языках есть filter = function + list
2. function проходит по списку и отбирает elements
code concept of UiUa
code 13: думая "по-массивски"
задача
1. есть массив [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2. четные элементы *2, нечетные +1
code concept of UiUa
code 13: думая "по-массивски"
1
2
code concept of UiUa
code 13: думая "по-массивски"
array
⇾
array index of mask
array
⇾
full array index of mask
1. Сделать маску для деления на 2 (0 делится, 1 не делится)
2. Инвертировать маску, взять те, которые = маске [2 4]
code concept of UiUa
code 13: думая "по-массивски"
задача
1. найти первое слово в строке
code concept of UiUa
code 13: думая "по-массивски"
задача
1. передвинуть массив: first будет last
code concept of UiUa
code 13: думая "по-массивски"
partition crach array by key
exemple: string crash by words
https://www.uiua.org/tutorial/thinkingwitharrays
code concept of UiUa
code 13: думая "по-массивски"
code concept of UiUa
code 13: думая "по-массивски"
code concept of UiUa
code 14: макросы
this is function
this
is
macros
function
arguments
задача
1. написать макрос свертки для range n (дали 5, получили 15)
code concept of UiUa
code 14: макросы
задача
1. макрос берет 3 операции (+, *, ⊂) и 2 массива
2. надо получить один массив из двух кусков
3. кусок 1 (левый) = сумма произведений массивов
4. кусок 2 (правый) =объединение массивов [1 2]
5. в результате получится один большой массив
code concept of UiUa
code 14: макросы
внутри макроса есть индексы 0,1,2,3,...
получает массив, возвращает код
code concept of UiUa
code 14: макросы
macros return string || array string
string || array string must be un box and evaluation
info
1. строки могут быть сложной структуры
2. внутри могут быть параметры, функции, ключи
code concept of UiUa
code 14: макросы
1. макрос запускается внутри массива
2. макрос получает строку "3+ 1 2 3 4 5 6"
3. °{⊙∘} извлекает число (=3) и функцию (=+)
4. ⋕ применяется к "3" и мы получаем 3
5. ↯ делаем три копии строки плюс "+++"
6. преобразуем "+++" в "+|+|+" и еще есть "1 2 3 4 5 6"
7. создаем "⊓(+|+|+) 1 2 3 4 5 6"
code concept of UiUa
code 14: макросы
https://www.uiua.org/tutorial/macros
code concept of UiUa
code 14: макросы
code concept of UiUa
code 15: неявный код
1. нет переменных
2. нет шаблонов
3. нет сборки мусора***
4. нет копий объектов
5. нет вращения стека
6. нет нескольких стеков
7. размер стека const
8. нет сложных глифов
code concept of UiUa
code 16: модули
module
1. способ
правильной
организации кода
2. у модуля свое пространство имен
3. модуль может быть в файле или коде
ok
error
ok
code concept of UiUa
code 16: модули
code concept of UiUa
code 16: модули
1. если у модуля есть
new || call
то его можно вызвать
2. это полезно, если внутри модуля функции ооп
1. если после имени модуля !, то он как макрос
2. имена внутри модуля доступны по именам
name field
name field
code concept of UiUa
code 16: модули
informatio
n
1. в uiua есть своя файловая система
2. можно open, close, read, write файлы
code concept of UiUa
code 16: модули
code concept of UiUa
code 17: тестирование
back error if second arg
≠
1
special test module
> uiua run
> uiua test
inside browser test run
code concept of UiUa
code 17: тестирование
code concept of UiUa
no code here
finish theory about uiua
Made with Slides.com