2020-06-04 19:57:48 +02:00
# kalk
2020-06-12 12:19:23 +02:00
[![Crates.io ](https://img.shields.io/crates/v/kalk_cli )](https://crates.io/crates/kalk_cli)
[![GitHub ](https://img.shields.io/github/license/PaddiM8/kalk )](https://github.com/PaddiM8/kalk/blob/master/LICENSE)
[![Docs.rs ](https://docs.rs/kalk/badge.svg )](https://docs.rs/kalk/latest/kalk/)
2020-12-09 16:57:18 +01:00
![Build status ](https://img.shields.io/github/workflow/status/PaddiM8/kalk/Rust?event=push&label=build%20%26%20test )
2020-06-12 17:56:01 +02:00
2020-06-12 01:08:07 +02:00
2020-12-11 19:39:18 +01:00
Kalk is a calculator (both program and library) that supports user-defined variables, functions, and units (experimental).
[Project kanban board (Kolan) ](https://kolan.strct.net/Board/4RAdMjLDz )
Website: [kalk.strct.net ](https://kalk.strct.net )
2020-06-04 19:57:48 +02:00
2020-06-12 00:34:50 +02:00
![](example.png)
## Features
* Operators: +, -, \*, /, !
* Groups: (), ⌈⌉, ⌋⌊
* [Pre-defined functions and constants ](https://github.com/PaddiM8/kalk/blob/master/kalk/src/prelude.rs )
* User-defined functions and variables. `f(x, y) = xy` , `x = 5`
2020-06-18 18:03:40 +02:00
* User-defined units (experimental). `unit m = cm/100` , `2m/50cm` , `50cm to m`
2020-06-12 00:34:50 +02:00
* Understands fairly ambiguous syntax. Eg. `2sin50 + 2xy`
* Syntax highlighting
* Special-symbol completion on tab. Eg. write `sqrt` and press tab. It will be turned into `√` .
2020-06-12 01:12:36 +02:00
* Sum function: `sum(start, to, expression)` Eg. `sum(1, 3, 2n+1)` is the same as `2*1+1 + 2*2+1 + 2*3+1` = `15`
2020-06-12 19:08:23 +02:00
* Load a file including predefined functions and constants. For example, if you're going to use Kalk for physics, you load up your file with physics functions/constants when starting Kalk. `-i file`
2020-06-14 22:53:11 +02:00
* Misc: separate expressions by a semicolon to write them on the same line, use the `ans` variable to get the value of the previously calculated expression.
2020-06-04 19:57:48 +02:00
2020-06-12 00:41:18 +02:00
## Installing
2020-06-22 14:40:49 +02:00
### Binaries
2020-12-11 19:39:18 +01:00
Pre-compiled binaries for Linux, Windows, and macOS (64-bit) are available in the [releases page ](https://github.com/PaddiM8/kalk/releases ).
2020-06-22 14:40:49 +02:00
### Compiling
2020-12-14 10:23:20 +01:00
**Minimum rust version: v1.36.0**. Make sure you have `diffutils` `gcc` `make` and `m4` installed. **If you use windows:** [follow the instructions here ](https://docs.rs/gmp-mpfr-sys/1.2.3/gmp_mpfr_sys/index.html#building-on-windows ) (don't forget to install `mingw-w64-x86_64-rust` in MSYS2).
2020-06-12 00:41:18 +02:00
2020-06-22 14:40:49 +02:00
#### Cargo
2020-06-12 00:41:18 +02:00
Run `cargo install kalk_cli`
2020-06-22 14:40:49 +02:00
#### Manually
2020-06-12 00:41:18 +02:00
1. Go into the `kalk_cli` directory.
2. Run `cargo build --release`
3. Grab the binary from `targets/release`
2020-06-18 18:03:40 +02:00
## Syntax
2020-12-13 02:36:51 +01:00
A more complete reference can be found on [the website ](https://kalk.strct.net )
2020-06-18 18:03:40 +02:00
### Functions
__Defining:__ name(parameter1, parameter2, ...) = expression
**Example:** `f(x) = 2x+3`
__Using:__ name(argument1, argument2)
**Example:** `f(2)`
### Variables
__Defining:__ name = expression
**Example:** `x = 3`
__Using:__ name
**Example:** `x`
2020-12-13 02:36:51 +01:00
### Units (experimental, are likely to not work properly)
2020-06-18 18:03:40 +02:00
*Note: You only need to define the relationship between two units once. You will be able to convert between both of them.*
__Defining:__ `unit` name = expression
**Example:** `unit deg = (rad*180)/π`
__Using:__ Use them freely in expressions.
**Example:** `2m/50cm`
__Converting:__ expression `to` unit
**Example:** `2 m to cm`