A parser for mathematical expressions.
https://hex.pm/packages/abacus
Abacus.eval(expression, scope)
Parses and evaluates the given expression. Variables can be supplied as a map of
binaries in the scope
.
iex> Abacus.eval("1 + 1")
{:ok, 2}
iex> Abacus.eval("sin(floor(3 + 2.5)) / 3")
{:ok, -0.3196414248877128}
iex> Abacus.eval("a * b", %{"a" => 10, "b" => 10})
{:ok, 100}
Abacus.parse(expression)
Parses the expression and returns the syntax tree.
An incomplete list of supported and planned features
- basic operators (
+
,-
,*
,/
,^
) - factorial (
!
) - bitwise operators (
|
,&
,>>
,<<
,~
,|^
(xor)) - support for functions
- trigonometric functions(
sin
,cos
,tan
) - floating point manipulation(
ceil
,floor
,round
) - data set analysis (
max
,min
,count
,sum
) - additional math functions(
mod
,sqrt
,abs
)
- trigonometric functions(
- support for variables
- support for parsing units
- support for converting units
- Add
abacus
to your list of dependencies inmix.exs
:
```elixir
def deps do
[{:abacus, "~> 0.4.2"}]
end
```
- Ensure
abacus
is started before your application:
```elixir
def application do
[applications: [:abacus]]
end
```