インストール
以下のように入力することでnpmからインストールすることができます。
$ npm install -g shikipl
使用方法
JavaScriptに埋め込みたいアスキーアートは\[…\]内に記述します。
var f = \[
a = 1
2
f(x) = 2x + 1
\]
上記の例では、変数fは2つのプロパティを持ちます。
1つは定数値1を持つプロパティa、もう1つは引数を1つ持つ関数のプロパティfです。
ShikiPLにより生成されたオブジェクトは以下のように使用します。
console.log(f.f(2)); // outputs 9
ShikiPLコードが埋め込まれたJavaScriptファイルをJavaScriptコードに変換するには以下のコマンドを打ちます。
$ shikipl filename.js.shikipl
コードの詳細
定数と関数
左辺の変数がf(x)、またはsubscriptがあるときは関数、単純な変数名のときは定数になります。
関数の引数はカンマで区切ることで複数与えられます。
// f.aは定数、f.f、f.gは関数
var f = \[
a = 27
f(x) = x + 1
f = x + 1
x
\]
下に書かれた式は上に書かれた定数、関数の内容を参照できます。
var f = \[
a = 27
f(x) = x + a
\]
console.log(f.f(2)); // outputs 29
加算・減算
加算・減算は+,-を使用します。
var f = \[
f(x) = 2x + 1
\]
console.log(f.f(2)); // outputs 5
乗算
乗算は数または変数を並べて書きます。
var f = \[
f(x) = 2x
\]
console.log(f.f(3)); // outputs 6
乗算は加算より高い優先順位を持ちます。括弧を使えば優先順位を変えられます。
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
べき乗
べき乗は数の右上に乗数を記述します。
var f = \[
2
f(x) = x
\]
console.log(f.f(3)); // output 9
べき乗は乗算より高い優先順位を持ちます。括弧を使えば優先順位を変えられます
var f = \[
2
f(x) = 2x
2
g(x) = (2x)
\]
console.log(f.f(3)); // outputs 18
console.log(f.g(3)); // outputs 36
分数
分数は分子と分母の式をハイフンで上下に区切って記述します。
var f = \[
x + 1
f(x) = -------
2
\]
console.log(f.f(1)); // outputs 1
平方根
平方根は対象の式を根号で囲みます。以下の例は2次方程式の解の1つを求めます。
var f = \[
________
/ 2
-b + v b - 4ac
f(a, b, c) = -----------------
2a
\]
console.log(f.f(2, -4, 2)); // outputs 1
絶対値
絶対値は|…|で囲みます。
var f = \[
f(x) = |x|
\]
console.log(f.f(-1)); // outputs 1
三角関数
三角関数はsin, cos, tanの後に対象の数を記述します。
sin a sin bと書いたときは(sin a)(sin b)の意味になります。
var f = \[
f(a) = sin a
\]
console.log(f.f(Math.PI / 2)); // outputs 1
sin, cos, tanの右上に乗数を記述することでべき乗を記述できます。
var f = \[
2 2
f(a) = sin a + cos a
\]
console.log(f.f(8.765346283)); // outputs 1
乗数を-1にすることで逆三角関数を計算できます。
var f = \[
-1
f(x) = tan x
\]
console.log(4 * f.f(1)); // outputs 3.14159...
双曲線関数
双曲線関数はsinh, cosh, tanhの後に対象の数を記述します。
sinh a sin bと書いたときは(sinh a)(sin b)の意味になります。
双曲線関数をサポートしていないのにJavaScriptエンジンではPolyfillが必要になります。
var f = \[
f(a) = sinh a
\]
console.log(f.f(1)); // outputs 1.17520119...
sinh, cosh, tanhの右上に乗数を記述することでべき乗を記述できます。
var f = \[
2 2
f(a) = sinh a + cosh a
\]
console.log(f.f(1)); // outputs 3.762195...
乗数を-1にすることで逆双曲線関数を計算できます。
var f = \[
-1
f(x) = tanh x
\]
console.log(0.5); // outputs 0.54930614...
角度
数の右上にoを記述することで角度からラジアンに変換することができます。
var f = \[
o
f(x) = sin x
\]
console.log(f.f(90)); // outputs 1
指数関数
指数関数はexpの後に対象の数を指定します。
var f = \[
f(x) = exp x
\]
console.log(f.f(1)); // outpus 2.71828...
対数関数
対数関数はlog, lnの後に対象の数を指定します。
var f = \[
f(a) = log a
\]
console.log(f.f(Math.E)); // outputs 1
logの右下に数を指定することで底を指定できます。lnではできません。
var f = \[
f(a) = log a
2
\]
console.log(f.f(8)); // outputs 3
定義済みの定数
e,π(\pi)は定義済みです。
var f = \[
a = e
b = π
\]
console.log(f.a); // outputs 2.71828...
console.log(f.b); // outputs 3.14159...
有限和
総和記号を使用することで有限和を計算することができます。
var f = \[
3
--- 2
f(a) = > an
---
n = 1
\]
console.log(f.f(2)); // outputs 28
無限級数
和の上限を無限大にすることで無限級数を計算できます。
var f = \[
oo n
--- x
f(x) = > ----
--- n!
n=0
\]
console.log(f.f(1)) // outputs 2.71828...
数値積分
積分記号を使用することで定積分を計算できます。
積分の変数は積分記号の直後に指定することが必要です。
積分の範囲は有限である必要があります。
var f = \[
a
/\ 2
f(a) = | dx x
\/
0
\]
console.log(f.f(2)); // outputs 2.666...
例
アッカーマン関数
アッカーマン関数は以下の表式で定義される関数です。
与える数が大きくなると爆発的に大きくなるという特徴があります。



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
ベッセル関数
ベッセル関数は下記の微分方程式の解となる関数です。

ここで、aは実数です。
ベッセル関数の解として以下の2つがあります。


上記の1つ目の式を第1種ベッセル関数(あるいは単にベッセル関数)、2つ目の式をノイマン関数とも呼びます。
(第1種)ベッセル関数をa=0のときに書き下すと以下のようになります。

ShikiPLを用いて計算してみましょう。
var f = \[
oo m
--- (-1) x 2m
J(x) = > ------- (---)
--- m!m! 2
m=0
\]
console.log(f.J(1)) // outputs 0.76519...
グーデルマン関数
グーデルマン関数は以下の式で定義されます。

また、以下の式と同値です。


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...