kalker
A scientific calculator that supports math-like syntax with user-defined variables, functions, derivation, integration, and complex numbers.
GitHub Repo
Download
f(x) = { f(x + 1) if x <= 1; x otherwise }
, pressing enter before
typing the final "}" will make a new line without submitting. Semicolons are only needed when
writing everything on the same line0b1101
, 0o5.3
,
0xff
1101_2
. The latter does not support letters, as they would base
command is used to set the display base. For example, writing
base 16
results in output being displayed in the hexadecimal number base,
as well as decimal.
+
, -
, *
, /
!
Factorial, eg. 5!
gives 120
%
Percent, eg. 5%
gives 0.05
, 10 + 50%
gives
15
%
, mod
Modulus (remainder), eg. 23 % 3
gives 2
true
, false
Boolean literalsand
, or
, not
You can type special symbols (such as √) by typing the normal function or constant name and pressing tab.
*
becomes ×
/
becomes ÷
and
becomes ∧
or
becomes ¬
not
becomes ∨
[[
becomes ⟦⟧
_123
becomes ₁₂₃
asin, acos, etc.
become sin⁻¹(), cos⁻¹(), etc
sqrt
becomes √
deg
becomes °
pi
becomes π
sum
becomes Σ()
prod
becomes ∏()
integrate
becomes ∫()
tau
becomes τ
phi
becomes ϕ
floor
becomes ⌊⌋
ceil
becomes ⌈⌉
gamma
becomes Γ
(
becomes ()
Variables are defined with the following syntax: name = value
x = 3/4
Functions are defined with the following syntax: name(param1, param2, etc.) = value
f(x) = 2x+3
A(x, y) = (xy)/2
They are used like this: name(arg1, arg2, etc.)
f(3) + 3
A(2, 3)
Derivation can be done like this: name'(arg1)
f'(3) + 3
sin'(pi)
sin
, cos
, tan
, cot
, cosec
,
sec
sinh
, cosh
, tanh
, coth
, cosech
,
sech
asin
, acos
, atan
, acot
, acosec
,
asec
ashin
, acosh
, atanh
, acoth
,
acosech
, asech
abs
, ceil
or ⌈⌉
, floor
or ⌊⌋
,
frac
,
round
, trunc
sqrt
or √
, cbrt
, exp
, log
,
ln
, arg
, Re
, Im
gamma
or Γ
asinh
, acosh
, atanh
, acoth
,
acosech
, asech
bitcmp
, bitand
, bitor
, bitxor
,
bitshift
comb
or nCr
, perm
or nPr
gcd
, lcm
min
, max
, hypot
log
- eg. log(1000, 10)
is the same as log10(1000)root
- eg. root(16, 3)
is the same as 3√16average
, perms
, sort
transpose
matrix
- takes a vector of vectors and returns a matrixintegrate
- eg. integrate(0, pi, sin(x) dx)
is the same as
sum
- eg. sum(n=1, 4, 2n)
is the same as
pi
or π
= 3.14159265
e
= 2.71828182
tau
or τ
= 6.2831853
phi
or ϕ
= 1.61803398
(x, y, z)
which may contain an arbitrary amount of items. Generally,
when an operation is performed on a vector, it is done on each individual item.
This means that (2, 4, 8) / 2
gives the result (1, 2, 4)
.
An exception to this is multiplication with two vectors, for which the result is
the dot product of the vectors. When a vector is given to a regular function,
the function is applied to all of the items in the vector.
vector[[index]]
. Indexes start at 1.
[n^2 : 0 < n < 10 and n != 5]
. A comprehension consists of
two parts. The first part defines what should be done to each number,
while the second part defines the numbers which should be handled in
the first part. At the moment, it is mandatory to begin the
second part with a range of the format a < n < b
where n
defines the variable which should be used in the comprehension.
Several of these variables can be created by separating the conditions
by a comma, for example [ab : 0 < a < 5, 0 < b < 5]
.
[x, y, z; a, b, c]
where semicolons are used to separate rows and
commas are used to separate items. It is also possible to press the enter key
to create a new row, instead of writing a semicolon. Pressing enter will not
submit if there is no closing square bracket. Operations on matrices work the
same way as with vectors, except that two matrices multiplied result in matrix
multiplication. It is also possible to obtain the tranpose of a matrix with the
syntax A^T
, where A
is a matrix and T
is
a literal T.
matrix[[rowIndex, columnIndex]]
. Indexes start at 1.
~/.config/kalker/
~/Library/Application Support/kalker/
or
~/Library/Preferences/kalker
%appdata%/kalker/
default.kalker
is found, it will
be loaded automatically every time kalker starts. Any other files in
this directory with the .kalker
extension can be loaded
at any time by doing load filename
in kalker. Note that
the extension should not be included here.