Содержание
- Выражения и переменные
- Константы
- Функции
- Фиксированной арности
- Произвольной арности
- Переменные
- Определение
- Функции как значения
- Примитивные типы
- Приведение типов
- Функции
- Определение функции
- Рекурсивные функции
- Общая рекурсия
- Хвостовая рекурсия
- Оптимизация хвостовой рекурсии
- Контракты
- Списки
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Вектора
- Литералы
- Создание
- Операции
- Проверки
- Свертки
- Стандартные функции
Домашнее задание 9. Линейная алгебра на Clojure
-
Разработайте функции для работы с объектами линейной алгебры,
которые представляются следующим образом:
- скаляры – числа
- векторы – векторы чисел;
- матрицы – векторы векторов чисел.
-
Функции над векторами:
v+/v-/v*/vd– покоординатное сложение/вычитание/умножение/деление;scalar/vect– скалярное/векторное произведение;v*s– умножение на скаляр.
-
Функции над матрицами:
m+/m-/m*/md– поэлементное сложение/вычитание/умножение/деление;m*s– умножение на скаляр;m*v– умножение на вектор;m*m– матричное умножение;transpose– транспонирование;
- Сложный вариант.
- Ко всем функциям должны быть указаны контракты. Например, нельзя складывать вектора разной длины.
-
Все функции, кроме
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³).