5. Алгоритм навигации робота
Оператор ... (splat)
Позволяет разложить вектор (или другую "коллекцию") в набор аргументов для функции
A = [1,2,3]
+(A)
+(A...)
Операторы можно использовать как функции, это префиксная нотация.
Функции in-place
Функция может заведомо не изменять значения своих аргументов, или специально изменять первый, или изменять несколько аргументов.
v = [1, 2, 3]
push!( v, 4 )
Ставить восклицательный знак после названия функции – просто договоренность. Все функции могут изменять свои аргументы, это скорее вопрос к программисту.
Учитывая что наши функции будут изменять свои входные аргументы, мы все равно будет возвращать выходные значения через return. Так у нас получится более наглядный интерфейс, более читаемый код и нам будет легче передложить программу на микроконтроллер, когда мы захотим.
CartesianIndex, CartesianIndices, LinearIndices
Индексировать матрицы при помощи переменных скоро станет неудобно, постоянно нужно писать оператор splat (...). Попробуем иначе.
A = [1 2 3; 4 5 6; 7 8 9]
A[2, 3]
i = CartesianIndex( 2, 3 )
A[i]
Чем это удобно... Индексы можно складывать без векторных операций. Так сложнее запутаться, создавая многомерный алгоритм. Индексы должны быть целочисленными.
Обычная одномерная индексация многомерных матриц: сначала по столбцам, потом по строкам
A[8]
Совсем не обязательно писать много вложенных циклов чтобы пройтись по всем элементам матрицы.
Как получить все индексы в одной матрице?
LinearIndices( A )
collect( CartesianIndices(A) )
В обычной индексации тоже можно запутаться (хотя бывают случаи, когда порядок элементов не важен)
collect( A[:] )
Системы координат графиков
Разные графики используют для разных целей, и часто финальная система координат зависит от порядка, в котором мы размещаем команды.

Лучший метод здесь – эмпирический.
Функции push! и pop!
Мы используем функции для помещения элементов в массив и для извлечения их оттуда – всегда с конца массива. Как работают эти команды?
v = []
push!( v, 1 )
push!( v, "fish" )
push!( v, missing )
x = pop!(v)
x
v
push!( [1,2,3], 4, 5, 6)
Эти команды не имеют эквивалента без восклицательного знака !
Функции first и last
v = [1,2,3]
first(v)
v = [(1,'a'), (2,'b'), (3,'c'), (4,'d')]
first.(v)
last.(v)