ShikiPL computes mathematical formulae written by ASCII art.
ShikiPL translates ASCII art to JavaScript code.

## Install

To install ShikiPL, type the command shown as follows.

## Details of code

### Constants and Functions

If left side is f(x) or an alphabet with subscript, the left side will be a function.
If left side is a simple alphabet, the left side will be a constant.
Multiple arguments can be specified by separating each arguments by comma.

// f.a is a constant, f.f, f.g are functions
var f = $a = 27 f(x) = x + 1 f = x + 1 x$

A formula can be referred from formulae written below.

var f = $a = 27 f(x) = x + a$
console.log(f.f(2));  // outputs 29

Symbols +, - are used by addition and subtraction, respectively.

var f = $f(x) = 2x + 1$
console.log(f.f(2));  // outputs 5

### Multiplication

Sequence of numbers or factors represents multiplication.

var f = $f(x) = 2x$
console.log(f.f(3));  // outputs 6

Multiplication has higher priority than addtion or subtraction.
Parenthesis can change the priority.

var f = $f(x) = 2x + 1 g(x) = 2(x + 1)$
console.log(f.f(3));  // outputs 7
console.log(f.g(3));  // outputs 8

### Exponentation

Exponentation represents superscript of a factor.

var f = $2 f(x) = x$
console.log(f.f(3));  // output 9

Exponentation has higher priority than multiplication.
Parenthesis can change the priority.

var f = $2 f(x) = 2x 2 g(x) = (2x)$
console.log(f.f(3));  // outputs 18
console.log(f.g(3));  // outputs 36

### Fraction

Fraction represents numerator and denominator divided up and down by hyphens.

var f = $x + 1 f(x) = ------- 2$
console.log(f.f(1));  // outputs 1

### Square root

Square root represents surrounding a formula by ASCII art square root symbol.
The example shown as follows computes one of solution of quadratic equation.

var f = $________ / 2 -b + v b - 4ac f(a, b, c) = ----------------- 2a$
console.log(f.f(2, -4, 2));  // outputs 1

### Absolute value

To compute absolute value, surrounds a formula by |…​|.

var f = $f(x) = |x|$
console.log(f.f(-1));  // outputs 1

### Trigonometric functions

To compute trigonometric function, writes sin, cos or tan before destination formula.
"sin a sin b" represents (sin a)(sin b).

var f = $f(a) = sin a$
console.log(f.f(Math.PI / 2));  // outputs 1

Exponentation of trigonometric function represents by superscript of sin, cos, tan.

var f = $2 2 f(a) = sin a + cos a$
console.log(f.f(8.765346283));  // outputs 1

Inverted trigonometric function can compute by setting superscript -1.

var f = $-1 f(x) = tan x$
console.log(4 * f.f(1));  // outputs 3.14159...

### Hyperbolic functions

To compute hyperbolic function, writes sinh, cosh or tanh before destination formula.
"sinh a sin b" represents (sinh a)(sin b).
In JavaScript engine which do not support hyperbolic functions, polyfill is needed.

var f = $f(a) = sinh a$
console.log(f.f(1));  // outputs 1.17520119...

Exponentation of hyperbolic function represents by superscript of sinh, cosh, tanh.

var f = $2 2 f(a) = sinh a + cosh a$
console.log(f.f(1));  // outputs 3.762195...

Inverted hyperbolic function can compute by setting superscript -1.

#### Angle

By setting superscript of a factor o, converts angle to radian.

var f = $o f(x) = sin x$
console.log(f.f(90));  // outputs 1

### Exponent function

To compute exponent function, writes exp before destination formula.

var f = $f(x) = exp x$
console.log(f.f(1));  // outpus 2.71828...

### Logarithm function

To compute logarithm function, writes log or ln before destination formula.

var f = $f(a) = log a$
console.log(f.f(Math.E));  // outputs 1

By setting subscript of a factor, you can specify a base of logarithm. It can specify only log, not ln.

var f = $f(a) = log a 2$
console.log(f.f(8));  // outputs 3

### Predefined constants

e, π(\pi) are predefined constants.

var f = $a = e b = π$
console.log(f.a);  // outputs 2.71828...
console.log(f.b);  // outputs 3.14159...

### Finite summation

Summation sign can be used to compute finite summation.

var f = $3 --- 2 f(a) = > an --- n = 1$
console.log(f.f(2));  // outputs 28

### Infinite series

To compute infinite series, upper limit of summation is set to infinity.

var f = $oo n --- x f(x) = > ---- --- n! n=0$
console.log(f.f(1))  // outputs 2.71828...

### Numerical integration

Integral sign can be used to compute numerial integration.
Variable to integrate must be set after integral sign.
Range of integration must be finite.

var f = $a /\ 2 f(a) = | dx x \/ 0$
console.log(f.f(2));  // outputs 2.666...

## Example

### Ackermann function

Ackermann function is a function shown as follows.   var f = $A = n+1 0,n A = A m,0 m-1,1 A = A m,n m-1,A m,n-1$
console.log(f.A(3, 3)) // outputs 61

### Bessel function at zeroth order

Bessel function at zeroth order is shown as follows. var f = $oo m --- (-1) x 2m J(x) = > ------- (---) --- m!m! 2 m=0$
console.log(f.J(1)) // outputs 0.76519...

### Gudermannian function

Gudermannian function is defined shown as follows. Formulae shown as follows are equivalent to Gudermannian function.  var f = $x /\ 1 g(x) = | dt -------- \/ cosh t 0$
console.log(f.g(2)) // outputs 1.3017603...
var f = $-1 g(x) = sin tanh x$
console.log(f.g(2)) // outputs 1.3017603...
var f = $-1 g(x) = tan sinh x$
console.log(f.g(2)) // outputs 1.3017603...
var f = $-1 x g(x) = 2tan (tanh ---) 2$
console.log(f.g(2)) // outputs 1.3017603...
var f = $-1 x π g(x) = 2tan (e ) - -- 2$
console.log(f.g(2)) // outputs 1.3017603...