Содержание

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

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

Объектные выражения на Clojure
  1. Разработайте конструкторы Constant, Variable, Add, Subtract, Multiply и Divide для представления выражений с одной переменной.
    1. Пример описания выражения 2x-3:
                              (def expr 
                                (Subtract
                                  (Multiply
                                    (Constant 2)
                                    (Variable "x"))
                                  (Const 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 (Const 2) (Const 0)) и
                              (Subtract
                                (Add
                                  (Multiply (Const 0) (Variable "x"))
                                  (Multiply (Const 2) (Const 1)))
                                (Const 0))
                          
      так же будут считаться правильным ответом.
  2. Усложненный вариант. Функция (parseObjectInfix "expression") должна разбирать выражения, записанные в инфиксной форме. Например,
    (parseObjectInfix "2 * x - 3")
    должно быть эквивалентно expr.
  3. При выполнение задания можно использовать любой способ преставления объектов.