Содержание
- Ввод-вывод
- Простейший ввод-вывод
- Работа с последовательностями событий
- Разбор ввода
- Разбор и гомоиконность
- Стандартный парсер
- Операции с кодом
- Исполнение сгенерированного кода
- Гомоиконность
- Подрядки вычисления
- Аппликативный
- Нормальный
- Ленивый
- Потоки
- Основные определения
- Операции с потоками
- Конечные потоки
- Бесконечные потоки
- Ленивые последовательности
- Отображения и множества
- Литералы
- Создание
- Проверки
- Операции
Домашнее задание 10. Функциональные выражения на Clojure
-
Разработайте функции
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
должны принимать произвольное число аргументов. Разборщик так же должен допускать произвольное число аргументов для+
,-
,*
,/
. -
При выполнении задания следует обратить внимание на:
- Выделение общего кода для операций.