mirror of
https://github.com/PaddiM8/kalker.git
synced 2025-02-24 12:30:52 +01:00
93 lines
4.3 KiB
Markdown
93 lines
4.3 KiB
Markdown

|
|
|
|
Kalker (or "kalk") is a calculator program/website that supports user-defined variables, functions, derivation, and integration. It runs on Windows, macOS, Linux, Android, and in web browsers (with WebAssembly).
|
|
|
|
[](https://crates.io/crates/kalker) [](https://github.com/PaddiM8/kalker/blob/master/LICENSE) [](https://docs.rs/kalk/latest/kalk/) 
|
|
|
|
[Kanban](https://kolan.strct.net/Board/4RAdMjLDz) | [Website - Try it out here!](https://kalker.strct.net)
|
|
|
|

|
|
|
|
## Features
|
|
|
|
* Operators: `+`, `-`, `*`, `/`, `!`
|
|
* Groups: `()`, `⌈ceil⌉`, `⌊floor⌋`, `[iverson]`
|
|
* [Pre-defined functions and constants](https://github.com/PaddiM8/kalker/blob/master/kalk/src/prelude.rs)
|
|
* User-defined functions and variables. `f(x, y) = xy`, `x = 5`
|
|
* Derivative of functions (derivatives of noisy functions or of higher order can be a bit inaccurate). `f'(2)`, `sin'(-pi)`
|
|
* Integration. `∫(0, pi, sin(x) dx)` or `∫(0, π, sin(x) dx)`, maybe sometimes be slightly off
|
|
* 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 `√`.
|
|
* 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`
|
|
* Piecewise functions: `f(x) = { f(x + 1) if x <= 1; x otherwise }`, pressing enter before typing the final `}` will make a new line without submitting.
|
|
* Load a file including predefined functions and constants. For example, if you're going to use kalker for physics, you load up your file with physics functions/constants when starting kalker. `-i file`
|
|
* 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.
|
|
|
|
## Libraries
|
|
|
|
There are currently three different libraries related to kalker.
|
|
|
|
* [kalk](https://crates.io/crates/kalk): The Rust crate that powers it all.
|
|
* [@paddim8/kalk](https://www.npmjs.com/package/@paddim8/kalk): JavaScript bindings for `kalk`. This lets you use it in the browser thanks to WebAssembly.
|
|
* [@paddim8/kalk-component](https://www.npmjs.com/package/@paddim8/kalk-component): A web component that runs `@paddim8/kalk`, which let's you use kalk in the browser with a command line-like interface.
|
|
|
|
## Installation
|
|
|
|
### Binaries
|
|
|
|
Pre-compiled binaries for Linux, Windows, and macOS (64-bit) are available in the [releases page](https://github.com/PaddiM8/kalker/releases).
|
|
|
|
### Compiling
|
|
|
|
**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).
|
|
|
|
#### Cargo
|
|
|
|
Run `cargo install kalker`
|
|
|
|
#### Manually
|
|
|
|
1. Go into the `cli` directory.
|
|
2. Run `cargo build --release`
|
|
3. Grab the binary from `targets/release`
|
|
|
|
## Syntax
|
|
|
|
A more complete reference can be found on [the website](https://kalker.strct.net)
|
|
|
|
### 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`
|
|
|
|
## Contributing
|
|
|
|
## kalk and cli (Rust)
|
|
|
|
After making changes to the kalk library (in `kalk/`), you can easily try them out by going to the root of the project directory, and doing `cargo run`. This will start kalker (cli), with the new changes. If you're using Windows, you will need to [follow the instructions here](https://docs.rs/gmp-mpfr-sys/1.2.3/gmp_mpfr_sys/index.html#building-on-windows), but also make sure to install `mingw-w64-x86_64-rust` in MSYS2.
|
|
|
|
## web (Svelte, TypeScript, Sass)
|
|
|
|
Run:
|
|
1. `npm install`
|
|
2. `npm run dev` - this will automatically re-compile the project when changes are made
|
|
|
|
## mobile (Android)
|
|
|
|
Run:
|
|
1. `npm install`
|
|
2. `npx cap sync`
|
|
3. Build the project using Android Studio, or Gradle directly.
|