Содержание

  1. Выражения и переменные
    1. Константы
    2. Функции
      1. Фиксированной арности
      2. Произвольной арности
    3. Переменные
      1. Определение
      2. Функции как значения
    4. Примитивные типы
    5. Приведение типов
  2. Функции
    1. Определение функции
    2. Рекурсивные функции
      1. Общая рекурсия
      2. Хвостовая рекурсия
      3. Оптимизация хвостовой рекурсии
    3. Контракты
  3. Списки
    1. Литералы
    2. Создание
    3. Операции
    4. Проверки
    5. Свертки
  4. Вектора
    1. Литералы
    2. Создание
    3. Операции
    4. Проверки
    5. Свертки
  5. Стандартные функции

Домашнее задание 12. Линейная алгебра на Clojure

Линейная алгебра на Clojure
  1. Разработайте функции для работы с объектами линейной алгебры, которые представляются следующим образом:
    • скаляры – числа
    • векторы – векторы чисел;
    • матрицы – векторы векторов чисел.
  2. Функции над векторами:
    • v+/v-/v* – покоординатное сложение/вычитание/умножение;
    • scalar/vect – скалярное/векторное произведение;
    • v*s – умножение на скаляр.
  3. Функции над матрицами:
    • m+/m-/m* – поэлементное сложение/вычитание/умножение;
    • m*s – умножение на скаляр;
    • m*v – умножение на вектор;
    • m*m – матричное умножение;
    • transpose – траспонирование;
  4. Усложненный вариант.
    1. Ко всем функциям должны быть указаны контракты. Например, нельзя складывать вектора разной длины.
    2. Все функции должны поддерживать произвольное число аргументов. Например (v+ [1 2] [3 4] [5 6]) должно быть равно [9 12].
  5. При выполнение задания следует обратить внимание на:
    • Применение функций высшего порядка.
    • Выделение общего кода для операций.