Содержание

  1. Объекты как структуры
    1. Поля и ассоциативные массивы
    2. Перебор полей
    3. Прототипы и наследование
    4. Object.create
    5. Массивы
  2. Методы и конструкторы
    1. Соглашения о вызове метода
    2. Использование методов
    3. Конструкторы
  3. Замыкания и икапсуляция
    1. Как работают замыкания
    2. Разделяемые замыкание
    3. Применение замыканий для инкапсуляции
  4. ООП
    1. Методы классов и экземпляров
    2. Наследование
    3. Иерархии классов
  5. Числа Чёрча

Домашнее задание 11. Объектные выражения на Clojure

Объектные выражения на Clojure
  1. Разработайте конструкторы Constant, Variable, Add, Subtract, Multiply, Divide и Negate для представления арифметических выражений.
    1. Пример описания выражения 2x-3:
      (def expr
        (Subtract
          (Multiply
            (Constant 2)
            (Variable "x"))
          (Constant 3)))
                          
    2. Функция (evaluate expression vars) должна производить вычисление выражения expression для значений переменных, заданных отображением vars. Например, (evaluate expr {"x" 2}) должно быть равно 1.
    3. Функция (toString expression) должна выдавать запись выражения в стандартной для Clojure форме.
    4. Функция (parseObject "expression") должна разбирать выражения, записанные в стандартной для Clojure форме. Например,
      (parseObject "(- (* 2 x) 3)")
      должно быть эквивалентно expr.
    5. Функция (diff expression "variable") должна возвращать выражение, представляющее производную исходного выражения по заданой перемененной. Например, (diff expression "x") должен возвращать выражение, эквивалентное (Constant 2), при этом выражения (Subtract (Constant 2) (Constant 0)) и
      (Subtract
        (Add
          (Multiply (Constant 0) (Variable "x"))
          (Multiply (Constant 2) (Constant 1)))
        (Constant 0))
                          
      так же будут считаться правильным ответом.
  2. Сложный вариант. Конструкторы Add, Subtract, Multiply и Divide должны принимать произвольное число аргументов. Разборщик так же должен допускать произвольное число аргументов для +, -, *, /.
  3. При выполнении задания можно использовать функции, приведённые на лекции.
  4. При выполнении задания можно использовать любой способ преставления объектов.