Содержание
- Выражения и переменные
- Константы
- Функции
- Фиксированной арности
- Произвольной арности
- Переменные
- Определение
- Функции как значения
- Примитивные типы
- Приведение типов
- Функции
- Определение функции
- Рекурсивные функции
- Общая рекурсия
- Хвостовая рекурсия
- Оптимизация хвостовой рекурсии
- Контракты
- Списки
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Вектора
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Стандартные функции
Домашнее задание 9. Линейная алгебра на Clojure
-
Разработайте функции для работы с объектами линейной алгебры,
которые представляются следующим образом:
- скаляры – числа
- векторы – векторы чисел;
- матрицы – векторы векторов чисел.
-
Функции над векторами:
v+
/v-
/v*
/vd
– покоординатное сложение/вычитание/умножение/деление;scalar
/vect
– скалярное/векторное произведение;v*s
– умножение на скаляр.
-
Функции над матрицами:
m+
/m-
/m*
/md
– поэлементное сложение/вычитание/умножение/деление;m*s
– умножение на скаляр;m*v
– умножение на вектор;m*m
– матричное умножение;transpose
– транспонирование;
- Сложный вариант.
- Ко всем функциям должны быть указаны контракты. Например, нельзя складывать вектора разной длины.
-
Все функции должны поддерживать произвольное число аргументов.
Например
(v+ [1 2] [3 4] [5 6])
должно быть равно[9 12]
.
-
При выполнении задания следует обратить внимание на:
- Применение функций высшего порядка.
- Выделение общего кода для операций.
Code Golf (бонус)
Правила
- Выигрывает самая короткая программа. Длина программы считается после удаления незначимых пробелов.
- Можно использовать произвольные функции стандартной библиотеки Clojure.
- Нельзя использовать функции Java и внешних библиотек.
-
Подача решений через
чат.
Решение должно быть корректно отформатировано
и начинаться с
;Solution номинация длина
. Например,;Solution det-3 1000
.
Номинации
det-3
— определитель матрицы за O(n³);det-s
— определитель дольше чем за O(n³);inv-3
— обратная матрица за O(n³);inv-s
— обратная дольше чем за O(n³).