Содержание
- JS-подобные объекты
- Ассоциативные массивы и прототипы
- Свойства
- Методы
- Конструкторы
- Наследование
- Java-объекты
- Интерфейсы
- Реализация
- Изменяемые поля
- Работа с Java-классами
- Изменяемое состояние
- Динамические переменные
- Локальные переменные
- Ссылки
Домашнее задание 11. Объектные выражения на Clojure
-
Разработайте конструкторы
Constant
,Variable
,Add
,Subtract
,Multiply
,Divide
иNegate
для представления арифметических выражений.-
Пример описания выражения
2x-3
:(def expr (Subtract (Multiply (Constant 2) (Variable "x")) (Constant 3)))
-
Функция
(evaluate expression vars)
должна производить вычисление выраженияexpression
для значений переменных, заданных отображениемvars
. Например,(evaluate expr {"x" 2})
должно быть равно 1. -
Функция
(toString expression)
должна выдавать запись выражения в стандартной для Clojure форме. -
Функция
(parseObject "expression")
должна разбирать выражения, записанные в стандартной для Clojure форме. Например,(parseObject "(- (* 2 x) 3)")
должно быть эквивалентноexpr
.
-
Пример описания выражения
- Сложный вариант.
-
Конструкторы
Add
,Subtract
,Multiply
иDivide
должны принимать произвольное число аргументов. Парсер так же должен допускать произвольное число аргументов для+
,-
,*
,/
. -
Функция
(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))
так же будут считаться правильным ответом.
-
Конструкторы
- При выполнении задания можно использовать любой способ представления объектов.
- При выполнении задания можно использовать функции, для определения JS-like объектов, приведённые на лекции.
Библиография
- Clojure
- Clojure Cheat Sheet
- Daniel Higginbotham Clojure for the Brave and True (Chapters 10, 12)