nmaltsev / expression

simple interpretator of math expressions on javascript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

expression

simple interpretator of math expressions on javascript

Интерпретатор математический выражений expression

Реализован на javascript с поддержкой возможности реализации функций на javascript.

Демо

Алгебраические выражения

Поддерживаются такие операторы, как: +, -, *, ^(возведение в степень), % (целочисленное деление), &&, ==, >=, <=, >, <, !=, ||. А так же тернарный оператор.

Пример: 13 + (5 - (12+2)^2)

Константы и преопределенные функции

Константы: pi, e, true, false, null

Функции: sin(x), cos(x), tan(x), log(x), min(x, y), max(x, y), length(x), not(x), call([args], var(x, y))

Функция not - Логическое отрицание

Функция var(name, value) - создание переменной name со значением value

Функция call - рекурсивный вызов текущей функции или лямбды

Пример расчета n-го числа Фибоначи

var('b', 15)

{n | n<3 ? 1 : call(n-1) + call(n-2)}(b)

Функция call здесь ссылается на лямбду

Лямбда функции

Имеют следующий синтаксис

{n|n * (n > 1 ? call(n-1) : 1)}(b)

До вертикальной черты (|) через запятую перечисляются аргументы, после возвращаемое значение. Результатом может быть другая лямбда. Аргументы функций и лямбд обладают ленивостью, то есть значение аргумента будет вычислено в момент обращения к нему внутри тела функции

Синтаксический сахар:

По аналогии с javascript, функции и лямбды как переменные

(12>4 ? min : max)(13,17)

Из Haskell был заимствован оператор $ для скрытия закрывающих скобок:

13 + $ -12 + 6 + min $ 10, 12 соответствует 13 + ( -12 + 6 + min(10, 12))

Чтобы избежать необходимость закрытия парных кавычек в литерных константах, был реализован дополнительны синтаксис. @abc соответсвует строчной константе "abc". Поэтому допускается создание переменных таким образом var(@abc, "Hello world!")

About

simple interpretator of math expressions on javascript

License:BSD 2-Clause "Simplified" License


Languages

Language:JavaScript 88.2%Language:CSS 11.8%