Задачи по проекту "Калькулятор выражений"
Нужно решить одну задачу на компьютере.
Номер задачи определяется как остаток от
деления номера студента по журналу на 3
(задачи нумеруются с нуля.)
Все 3 задачи требуют модификации проекта
"Калькулятор выражений", реализованного на языке Haskell.
Исходные файлы проекта содержатся в архиве
Calc.zip:
файл
Calc.hs содержит
непосредственно код калькулятора выражений,
реализованный в виде модуля Calc —
в терминологии языка Haskell это "чистый" (pure) код.
Файл
exprCalc.hs
является лишь интерфейсом ввода-вывода (функция main)
и содержит "грязный" (tainted) код. Выполняемая
программа "exprCalc" (или "exprCalc.exe" в MS Windows)
компилируется с помощью команды
ghc --make exprCalc.hs
(или просто командой make в Linux или OS-X —
Makefile предусмотрен).
Изменения в проект следует вносить только в файл
Calc.hs, содержащий модуль Calc
(при компиляции этот модуль автоматически компилируется и
подключается в строке "import Calc" файла
exprCalc.hs).
Список задач
-
В предложенном варианте проекта стандартные функции могут иметь
только 1 аргумент (sin, cos, sqrt, exp, log, atan).
Изменить проект так, чтобы можно было добавлять функции
от произвольного (ненулевого) числа аргументов, например,
добавить функции pow, atan2, gcd, зависящие от двух аргументов,
и функцию powmod, зависящую от трех аргументов (последние две функции
оперируют с целыми числами, т.е. перед вычислениями приводят значения
аргументов к целому типу, отбрасывая дробную часть).
-
Добавить операцию возведения в степень, которая может обозначаться
либо двумя звездочками ** (как в языке Python), либо символом
"крышки" ^ (как принято у математиков, поскольку этот
символ используется для показателей степени и верхних индексов
в TeX). Эта операция,
в отличие от остальных арифметических операций, должна выполняться
справа налево (например, 2^2^3 = 256, а не 64) и иметь
приоритет, более высокий, чем у остальных арифметических операций
(например, 2*3^2 = 18, а не 36).
-
Добавить возможность использования констант pi и e
в выражениях. Например,
Enter an expression:
sin(pi/6)
= 0.5
Enter an expression:
e
= 2.718281828459045
Enter an expression:
log(e*e)
= 2.0