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

KateBeckinsale

UNDER: ВЗЯЛ, СДЕЛАЛ, ВЕРНУЛ

code concept of UiUa

code 01: введение

1. императивное

2. объектно-ориентированное

3. функциональное

4. декларативное

5. логическое

6. событийное

7. параллельное

8. структурное

9. мета-программирование

KateBeckinsale

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: модули

information

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

intro

By Ivan Sedov

intro

  • 200