Calc
Install
You can install the latest version from source
git clone https://github.com/coco33920/calc
cd calc
cargo build --release
./target/release/mini-calc
or install it via cargo
cargo install mini-calc
Explaining
Check the website for more informations.
TODO List
- Lexing of basic operations
- Lexing operators
- Lexing lpar,rpar,quote
- Lexing int
- Lexing floats
- Lexing identifiers
- Parsing of basic operations
- Parsing int,floats,identifiers
- sum operation
- minus operation
- multiplication operation
- division operation
- Parsing advanced operations
- Parsing lpar,rpar
- mathematical priority
- Left priority
- Right priority
- parenthesis support
- Assignment
- associativity support
- Left associativity
- Right associativity
- Application REPL
- Add the REPL
- basic REPL
- colour message
- colourised prompt
- Add colour
- Add the REPL
- Interpreter
- Basic operation interpreter
- Advanced operation interpreter
- Identifiers (variable) interpreter
- Built-in
- pi
- e
- Config
- Config colours
- Config prompt
- Config floating point accuracy
- Add more operations
- exponent
- Add support for functions
- exp
- ln
- log base a
- cos/sin/tan
- cosh/sinh/tanh
- atan/acos/asin
- Add logic
- Add basic true/false
- Add binary operator
- or (&&)
- and (||)
-
>=
-
>
-
<=
-
<
-
==
- Add unary operator
- not (!)
- Vector calculation
- Add vectors to the datatypes
- Lex vectors
- Parse vectors
- Add vector operations
- Dot product
- Vector norm
- Vector addition
- Matrix calculation
- Add matrix to the datatypes
- Lex matrices
- Parse matrices
- Add matrices operation
- Matrix addition
- Matrix multiplication
- Calculate the matrix determinant
- Calculate the reverse matrix
- Interact with the configuration
- Print current config
- Reset config to default
- Set config
- Set main color
- Set prompt color
- Set prompt
- Set greeting message
- Set greeting color
- Reload config
Evolution
Ploting
Plot functions (both stdlib, and runtime) would be useful and appreciated.
- Plot stdlib functions
- Plot runtime functions
- Save plot to png/svg/pdf
Exact math calculator
As this project provides a frontend with a parser we could plug an exact math engine in the backend to transform calc
into a real exact math calculator. TODO List for the Exact Math Engine
- Rational calculation
- Implement rational numbers operations
- Rational reduction
- Irrational calculation
- Implement irrational numbers operations
- Irrational reduction
- Literal calculation
- Computes literal expression with uninitialized operators
- Literal reduction
CAS
If we ever go to this step, yes, I will remove the "minimalistic" from the description
- It's hard.
Examples
REPL with only Lexing (verbose mode: on by default)
REPL with lexing and basic operation parsing (verbose mode: on by default)
REPL and functionning interpreter (verbose mode: off by default)
Configuration
You can configure the general color, greeting message, greeting color, prompt and prompt color from the file for example in (for linux)
~/.config/mini-calc/mini-calc.toml
Or situated in your operating system config folder.
What the configuration looks like
The default configuration looks like this
Colors
Available colors are
- purple
- cyan
- blue
- black
- red
- yellow
- green
- white
- an hexadecimal colour (ex: "#f7a8d8")
Default colour (if the configuration fail to load) is Cyan.
Example of a modified configuration
Configuration:
It looks like:
Functions
The following functions are available
- sin
- cos
- tan
- sinh
- cosh
- tanh
- asin
- acos
- atan
- exp
- ln (alias: log)
- sqrt
- factorial (alias: fact)
- abs
- ceil
- floor
- round
Trigonometry
For trigonometry, the input are assumed to be in radian, if not, you have to put "false" or "true" as second argument, example shown bellow
Exp/ln
If you use the exp function you can pass a second argument for the base you are using, if no second arguments are passed this is assumed to be in natural base
Root
You can take the nth root with the sqrt function, by default it takes the second root.
Round
You can round to the nth decimal with the round function, by default it round to the integer (floor)
Logic
You can now use logic! I implemented the following functions:
- or (alias : ||)
- and (alias : &&)
- geq (alias :
>=
) - gt (alias :
>
) - leq (alias :
<=
) - lt (alias :
<
) - eq (alias :
==
)
Example:
User defined functions!
You can define your own functions!
Vector calculation !
You can use vectors!
- add vector to each others
- added the
norm
function to compute the norm - dot product between two vectors ( * operator)
Functions added:
- norm
Matrices !
As of 2.7.0 matrix algebra is implemented (using lup reduction)
- you can add matrices
- multiply compatible matrices
functions added
- transpose
- invert
- det