Calc

  Программа написанная на языке Lisp2D, вычисляет формы заданные строками. Анализирует данное выражение для вычисления и вычисляет его.
  Запуск калькулятора:
  > ./lisp2d calc.lisp2d

  Точность вычисления определяется возможностями интерпретатора - числа хранятся в режиме дробей.
  Поддерживаются бинарные функции:
+сложение
-вычитание
*умножение
/деление
%остаток от деления
^степень
  При отсутствии аргумента бинарной функции подразумевается последний результат. Унарная операция минус не поддерживается. Отрицательное число следует писать так:
  -1 → 0-1
  Поддерживается вычисление функций:
absабсолютное значение |x|
floorцелая часть числа [x] (полeng)
floor(x,n)целая часть деления [x/n]
ceilминимальное целое число не меньшее x (потолокeng)
gcd(x,…,z)наибольший общий делитель целых чисел
lcm(x,…,z)наименьшее общее кратное целых чисел
sqrt(x[,eps])квадратный корень √x [с указанной точностью eps]
cbrtкубический корень
expэкспонента ex
lnлогарифм натуральный ln(x)
log(base,x)логарифм с основанием base: logbase(x)
!факториал x!
sinсинус sin(x)
cosкосинус cos(x)
tanтангенс tan(x)
cotкотангенс cot(x)
arcsinарксинус sin-1(x)
arccosарккосинус cos-1(x)
arctanарктангенс tan-1(x)
arctan(y,x)арктангенс от деления tan-1(y/x)
sinhсинус гиперболический sinh(x)
coshкосинус гиперболический cosh(x)
tanhтангенс гиперболический tanh(x)
cothкотангенс гиперболический coth(x)
arsinhарксинус гиперболический sinh-1(x)
arcoshарккосинус гиперболический cosh-1(x)
artanhарктангенс гиперболический tanh-1(x)
degrees=x*180/π
radians=x/180*π
combin(x,n)=C(x,n)=n!/x!/(n-x)!
combina(x,n)=n!/(n-x)!
multinomial(x,…,z)=(x+…+z)!/x!…/z!
erf(x)функция ошибок Гаусса: 2/√π0x(e-t2)ⅆt
num(x)числитель
denom(x)делитель
round(x)округление до целого числа
round(x,y)округление в пределах [x-y,x+y]
real(x)действительная часть комплексного числа
imag(x)мнимая часть комплексного числа

  Есть возможность использовать математические константы pi и e.
  Функция без аргументов random возвращает случайное число [0…1).
  Поддерживаются числа, со знаком экспоненты.
  Разрешается использовать не скобочную запись для унарных функций.
  Поддерживает вычисления заданные с помощью скобок.
  Последнюю задачу для вычисления можно вернуть нажав кнопку вверх.
  Комплексные числа? Пожалуйста…
  Для выхода нужно нажать ESC или Ctrl+Q.
  Можно запускать вычисления не используя окна.

> ./lisp2d calc.lisp2d "9^9" "x" "exp(2)"
387420489 error 7.38905609893