Тема  7. Функции

Содержание

  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. Стандартные функции

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

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

Code Golf (бонус)

Правила

  1. Выигрывает самая короткая программа. Длина программы считается после удаления незначимых пробелов.
  2. Можно использовать произвольные функции стандартной библиотеки Clojure.
  3. Нельзя использовать функции Java и внешних библиотек.
  4. Подача решений через чат. Решение должно быть корректно отформатировано и начинаться с ;Solution номинация длина. Например, ;Solution det-3 1000.

Номинации

  • det-3 — определитель матрицы за O(n³);
  • det-s — определитель дольше чем за O(n³);
  • inv-3 — обратная матрица за O(n³);
  • inv-s — обратная дольше чем за O(n³).