Обьектные выражения на Clojure:
1 Часть - Функциональные выражения (текущая)
2 Часть - Объектные выражения
-
Разработайте функции
constant
,variable
,add
,subtract
,multiply
,divide
иnegate
для представления арифметических выражений.- Пример описания выражения
2x-3
:
(def expr (subtract (multiply (constant 2) (variable "x")) (constant 3)))
- Выражение должно быть функцией, возвращающей значение выражения при подстановке переменных, заданных отображением. Например,
(expr {"x" 2})
должно быть равно1
.
- Пример описания выражения
-
Разработайте разборщик выражений, читающий выражения в стандартной для Clojure форме. Например,
(parseFunction "(- (* 2 x) 3)")
должно быть эквивалентноexpr
.
Функции add, subtract, multiply и divide должны принимать произвольное число аргументов. Разборщик так же должен допускать произвольное число аргументов для +, -, *, /.
- При выполнении задания следует обратить внимание на:
- Выделение общего кода для операций.
- MeanVarn. Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
mean
– математическое ожидание аргументов,(mean 1 2 6)
равно 3;varn
– дисперсия аргументов,(varn 2 5 11)
равно 14;
- операций произвольного числа аргументов:
- SumexpSoftmax. Дополнительно реализовать поддержку:
- операций произвольного числа аргументов:
sumexp
– сумма экспонент,(sumexp 8 8 9)
примерно равно 14065;softmax
– softmax первого аргумента,(softmax 1 2 3)
примерно равно 0.09;
- операций произвольного числа аргументов:
- PowLog. Дополнительно реализовать поддержку:
- бинарных операций:
pow
– возведение в степень,(pow 2 3)
равно 8;log
– логарифм абсолютной величины по основанию абсолютной величины,(log -2 -8)
равно 3.
- бинарных операций:
- ExpLn. Дополнительно реализовать поддержку:
- унарных операций:
exp
– экспонента,(exp 8)
примерно равно 2981;ln
– натуральный логарифм абсолютной величины,(ln -2981)
примерно равно 8.
- унарных операций:
+ SinCos
+ SinhCosh
+ SumAvg
+ MeanVarn
+ SumexpSoftmax
+ PowLog
+ ExpLn