Munet Meddler js 解説

インストール方法

 readmeの再掲となります。

インストールの仕方

  一例。以下はマクロ未登録という前提の記述です。
  また各エディタのバージョンアップにより操作が異なる場合があります。適宜空気を読んでください。

  gPad版)
    ・ツール>オプション>キーボード
    ・「分類」にて、マクロを選択
    ・「コマンド」にて、マクロ1を選択
    ・「説明」にて、解凍したフォルダの「mumed_gpad.js」を指定
    ・「新しいキーの入力」にフォーカスを合わせ、Altボタンを押しながらキーボードのZを押す
    ・割り当てボタンを押す
    ・OKボタンを押す

  サクラエディタ版)
    ・設定>共通設定>マクロ
    ・マクロ一覧の文言の右にあるフォルダに解凍したフォルダの「mumed_sakura.js」をコピーペースト
    ・設定>共通設定>マクロ
    ・「Id」を0、「File」から「mumed_sakura.js」を選択、「自動実行」はいずれも選択しない
    ・他項は適当に設定して「設定」ボタンを押す
    ・設定>共通設定>キー割り当て
    ・「種別」にて、外部マクロを選択
    ・「機能」にて、上項で登録したマクロを選択
    ・「ALt」を選択
    ・「キー」から「Alt+Z」を探しだし、割付ボタンを押す
    ・OKボタンを押す

  Mery版)
    ・マクロ>カスタマイズ
    ・「追加」にて、解凍したフォルダの「mumed_mery.js」を指定
    ・ツール>オプション>キーボード
    ・「分類」にて、マイ マクロを選択
    ・「マクロ」にて、先程選んだ「mumed_mery.js」を指定
    ・「追加するショートカットキー」にフォーカスを合わせ、Altボタンを押しながらキーボードのZを押す
    ・割り当てボタンを押す
    ・OKボタンを押す

  Ginnie版)
    ・マクロ>スクリプトファイル>設定
    ・「追加」を押す
    ・「スクリプトファイル」にて、解凍したフォルダの「mumed_ginnie.js」を指定
    ・「言語」はJScriptのまま
    ・「パラメータ」は空白のまま
    ・「ショートカットキー」にAlt+Z…はないのでCtrl+Eでも指定
    ・「名前」「アイコンファイル」はご自由に、但し名前は必須

  インストール確認)
    ・新しいファイルとか適当に作って「(+ 1 2)」とか書く
    ・その行でAlt+Zを押す
    ・せいかい!

アンインストールの仕方

  ・「インストールの仕方」項の逆手順を取る
  ・エイリアスもどきを利用した場合、マイドキュメント直下の「mumed_profile」ファイルを削除

関数一覧

 man関数の再掲となります。

+
;Manual : 加算します。
; (+ n1 n2 [n3 ...])
(+ 12 34)       ; 46(12+34)を表示します。
(+ 12 34 56 78) ; 180(12+34+56+78)を表示します。
;;; + は省略可能です。
(12 34 56 78)   ; 180を表示します。
-
;Manual : 減算します。
; (- n1 n2 [n3 ...])
(- 12 34)       ; -22(12-34)を表示します。
(- 12 34 56 78) ; -156(12-34-56-78)を表示します。
*
;Manual : 乗算します。
; (* n1 n2 [n3 ...])
(* 12 34)       ; 408(12*34)を表示します。
(* 12 34 56 78) ; 1782144(12*34*56*78)を表示します。
/
;Manual : 除算します。
; (/ n1 n2 [n3 ...])
(/ 12 34)       ; 6/17(12/34)を表示します。
(/ 12 34 56 78) ; 1/12376(((12/34)/56)/78)を表示します。
\
;Manual : 商を計算します。
; (\ n1 n2 [n3 ...])
; 整数値以外が含まれると除算「/」と同じ動作をします。
(\ 1234 56)     ; 22(1234÷56)を表示します。
(\ 1234 56.0)   ; 22.03571…を表示します。
%
;Manual : 剰余を計算します。
; (% n1 n2 [n3 ...])
(% 12345 67)    ; 17(12345%67)を表示します。
(% 12345 67 8)  ; 1((12356%67)%8)を表示します。
and
;Manual : ビット毎の論理積を計算します。
; (and n1 n2 [n3 ...])
(and 23 45)     ; 5(23&45)を表示します。
(and 23.4 56.7) ; 16(23&56)を表示します。
;;; すべての引数は整数に変換されます。
or
;Manual : ビット毎の論理和を計算します。
; (or n1 n2 [n3 ...])
(or 23 45)      ; 63(23|45)を表示します。
(or 34.5 67.8)  ; 99(34|67)を表示します。
;;; すべての引数は整数に変換されます。
xor
;Manual : ビット毎の排他的論理和を計算します。
; (xor n1 n2 [n3 ...])
(xor 23 45)     ; 58(23^45)を表示します。
(xor 23.4 56.7) ; 47(23^56)を表示します。
;;; すべての引数は整数に変換されます。
not
;Manual : 各ビットの否定を計算します。
; (not n1)
(not 2345)      ; -2346(~2345)を表示します。
(not 2345.678)  ; 同じく、-2346を表示します。
;;; 引数は整数に変換されます。
pi
;Manual : 円周率です。
; pi
(+ pi 1)        ; π+1(4.14159…)を表示します。
;;; 2pi や pi/2 のような表記はできないので注意。
e
;Manual : ネイピア数です。
; e
(+ e 1)         ; e+1(3.71828…)を表示します。
;;; 2e や e/2 のような表記はできないので注意。
abs
;Manual : 絶対値を求めます。
; (abs n1)
(abs 1234)      ; 1234を表示します。
(abs -1234)     ; 同じく、1234を表示します。
int
;Manual : 整数化します。
; (int n1)
(int 123/4)     ; 30(123/4は30.75)を表示します。
(int 123.4)     ; 123を表示します。
;;; 小数点以下を繰り下げた整数値を返します。
float
;Manual : 小数化します。
; (float n1)
(float 1234)    ; 1234.0を表示します。
(float 123/4)   ; 30.75を表示します。
;;; 除算結果を分数で表示したくない場合は、
(float (/ 32 25)) ;;; などとやるより、
(/ 32 25.0)       ;;; のように書いたほうが簡単です。
max
;Manual : 最大値を選択します。
; (max n1 n2 [n3 ...])
(max 12 34)       ; 34(34>12)を表示します。
(max 12 34 56 78) ; 78(78>56>34>12)を表示します。
min
;Manual : 最小値を選択します。
; (min n1 n2 [n3 ...])
(min 12 34)       ; 12(12<34)を表示します。
(min 12 34 56 78) ; 12(12<34<56<78)を表示します。
gcd
;Manual : 最大公約数を求めます。
; (gcd n1 n2 [n3 ...])
(gcd 12 34)            ; 2(gcd(12,34))を表示します。
(gcd -100 123/4 56.78) ; 2(gcd(100,30,56))を表示します。
;;; すべての引数は正の整数に変換されます。
;;; 引数に 0 が含まれていると 0 を返します。
lcm
;Manual : 最小公倍数を求めます。
; (lcm n1 n2 [n3 ...])
(lcm 12 34)            ; 204(lcm(12,34))を表示します。
(lcm -100 123/4 56.78) ; 4200(lcm(100,30,56))を表示します。
;;; すべての引数は正の整数に変換されます。
;;; 引数に 0 が含まれていると 0 を返します。
prime
;Manual : 引数以下の最大素数を求めます。
; (prime n1)
(prime 1234)    ; 1231を表示します。
(prime -567.8)  ; 563を表示します。
;;; 引数は正の整数に変換されます。
;;; 変換した結果 2^52 を超える場合は 2^52 に変換されます。
;;; 変換した結果 2 未満の場合は 2 を返します。
sin
;Manual : 正弦を求めます。
; (sin n1)
(sin pi)        ; 0.0、又は0.0に限りなく近い数(sin(π))を表示します。
;;; 引数はラジアンとして扱われます。
cos
;Manual : 余弦を求めます。
; (cos n1)
(cos pi)        ; -1.0、又は-1.0に限りなく近い数(cos(π))を表示します。
;;; 引数はラジアンとして扱われます。
atan
;Manual : 逆正接を求めます。
; (atan n1 [n2])
; 第二引数を省略すると、 n1 の逆正接を表示します。
; 第二引数を設定すると、 n1/n2 の逆正接を表示します(俗称atan2)。
(atan 1)        ; π/4(0.78539…=atan(1))を表示します。
(atan 1 0)      ; π/2(1.57079…=atan(∞))を表示します。
;;; 返り値はラジアンです。
;;; 第二引数を設定した場合では n2 に 0 が指定でき、
;;; また象限の区別が可能なため、範囲が -π < atan(n1/n2) <= π に拡張されます。
power
;Manual : 累乗を求めます。
; (power n1 n2)
(power 10 4)        ; 10000(10^4)を表示します。
(power 10 4 4 4)    ; 10の64乗(((10^4)^4)^4)を表示します。
log
;Manual : 対数を求めます。
; (log n1 [n2])
; 第二引数を省略すると、自然対数を底とします。
(log 256 2)     ; 8.0、又は8.0に限りなく近い数(log<2>256)を表示します。
(log (* e e e)) ; 3.0、又は3.0に限りなく近い数(log<e>e^3)を表示します。
rnd
;Manual : 乱数を生成します。
; (rnd [n1])
; 第一引数を省略すると、 0 以上 1 未満の乱数(小数)を生成します。
; 第一引数を設定すると、 0 以上で、引数の絶対値(小数点以下切り捨て)を超えない乱数(整数)を生成します。
(rnd)        ; 0 以上 1 未満の乱数を表示します。
(rnd -102.4) ; 0 ~ 101 の範囲内で乱数を表示します。
car
;Manual : 第一引数を抽出します。
; (car n1 [n2 ...])
; 返り値は第一引数を評価した結果となります。
(car 1 2 3 5 8)        ; 1 を表示します。
print
;Manual : 引数を書き出します。
; (print n1 [n2 ...])
; 返り値は第一引数以降を評価した結果となります。
; 環境変数は展開されます。
; 括弧で括られた引数は評価されます。
(print 1 2 3 5 8)         ; 1 2 3 5 8 を表示します。返り値は合算結果です。
(print * 1 2 (+ 3 5) 8)   ; * 1 2 8 8 を表示します。返り値は1*2*8*8です。
(print (* 1 2 (+ 3 5) 8)) ; 評価結果を書き出す場合は全体を括弧で括ります。
alert
;Manual : 引数をダイアログ表示します。
; (alert n1 [n2 ...])
; 返り値は第一引数以降を評価した結果となります。
; 環境変数は展開されます。
; 括弧で括られた引数は評価されます。
(alert 1 2 3 5 8)         ; 1 2 3 5 8 を表示します。返り値は合算結果です。
(alert * 1 2 (+ 3 5) 8)   ; * 1 2 8 8 を表示します。返り値は1*2*8*8です。
(alert (* 1 2 (+ 3 5) 8)) ; 評価結果を書き出す場合は全体を括弧で括ります。
; 表示方法を除けば print と同じです。
base
;Manual : 基数を指定して書き出します。
; (base n1 n2)
; 第二引数に基数を設定します。 2 以上 36 以下の整数に丸められます。
; 返り値は第一引数となります。
(base 54 13)  ; 42を表示します。返り値は54です。
(base 5/4 13) ; 分数は小数に変換した後に基数変換します。
md5sum
;Manual : ファイルのMD5チェックサムを書き出します。
; (md5sum f1 [f2 ...])
; 返り値は 0 となります。
(md5sum C:\WINDOWS\win.ini)      ; Windows初期設定ファイルのMD5を取得します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
sha1sum
;Manual : ファイルのSHA1チェックサムを書き出します。
; (sha1sum f1 [f2 ...])
; 返り値は 0 となります。
(sha1sum C:\WINDOWS\win.ini)     ; Windows初期設定ファイルのSHA1を取得します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
sha256sum
;Manual : ファイルのSHA256チェックサムを書き出します。
; (sha256sum f1 [f2 ...])
; 返り値は 0 となります。
(sha256sum C:\WINDOWS\win.ini)   ; Windows初期設定ファイルのSHA256を取得します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
sha512sum
;Manual : ファイルのSHA512チェックサムを書き出します。
; (sha512sum f1 [f2 ...])
; 返り値は 0 となります。
(sha512sum C:\WINDOWS\win.ini)   ; Windows初期設定ファイルのSHA512を取得します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
cat
;Manual : テキストファイルを読み込みます。
; (cat f1 [f2 ...])
; 返り値は 0 となります。
(cat C:\WINDOWS\win.ini)         ; Windows初期設定ファイルを読み込みます。
;;; 文字コードは Shift-JIS 対応ですが、ある程度なら自動判別します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
;;; 読み込み確認は実施しません。自己責任で。
hexdump
;Manual : ファイルをバイナリ形式で読み込みます。
; (hexdump f1 [f2 ...])
; 返り値は 0 となります。
(hexdump C:\WINDOWS\win.ini)     ; Windows初期設定ファイルを読み込みます。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
;;; 読み込み確認は実施しませんし、高速化なんて全然してません。
;;; 本当の本当に自己責任で。
touch
;Manual : ファイルのタイムスタンプを更新します。
; (touch f1 [f2 ...])
; 返り値は 0 となります。
(touch C:\WINDOWS\win.ini)       ; Windows初期設定ファイルのタイムスタンプを更新します。
;;; ファイルパスを " で囲むか、8.3形式を駆使しないと、まともに使えません。
;;; 多少のタイムラグがあります。
;;; ファイルが存在しない場合、新しい0バイトのファイルが生成されます。
cls
;Manual : タブ内のテキストを全削除します。
; (cls [-f])
; 返り値は 0 となります。操作をキャンセルした場合 1 となります。
; 第一引数に -f をつけると確認ダイアログを表示しません。
(cls)     ; タブ内のテキストを全削除します。返り値のみを表示した状態にします。
(cls -f)  ; 同様の動作をしますが、確認ダイアログを表示しません。
cd
;Manual : カレントフォルダを変更します。
; (cd [f1])
; 返り値は 0 となります。フォルダが存在しない場合 1 となります。
; 第一引数を省略すると、初期化します。
; 初期値はマイドキュメントとなります。
(cd C:\WINDOWS) ; カレントフォルダとして、Windowsフォルダに移動します。
(cd)            ; カレントフォルダを初期化し、マイドキュメントを指定します。
;カレントフォルダ情報はマイドキュメントの「mumed_profile」に保存します。
pwd
;Manual : カレントフォルダを表示します。
; (pwd)
; 返り値は 0 となります。
(pwd)     ; カレントフォルダを表示します。
ls
;Manual : カレントフォルダのサブフォルダとファイルを表示します。
; (ls [-[stx][r]] [f1 f2 ...])
; 返り値は 0 となります。
; 第一引数でファイル名の条件指定ができます。
; * で、0文字以上の任意の文字列を指定します。
; ? で、0~1文字の任意の文字列を指定します。
; [] で、括弧内のどれか1文字を指定します。
; 引数に -t を指定すると更新日時の降順にソートします。
; 引数に -s を指定するとファイルサイズの降順にソートします。
; 引数に -x を指定すると拡張子の昇順にソートします。
; 上記の並べ替え引数に -r を指定すると逆順にソートします。
(ls)        ; カレントフォルダのサブフォルダとファイルを表示します。
(ls *.txt)  ; 拡張子がtxtのものを抽出します。
(ls [0-9]*) ; 先頭が数字のものを抽出します。
(ls -x)     ; 拡張子ごとにソートします。
(ls -tr)    ; 更新日時の昇順にソートします。
ll
;Manual : カレントフォルダのサブフォルダとファイルの詳細を表示します。
; (ll [f1])
; 表示形式以外はls関数と同じです。
sl
;Manual : slを表示します。
; (sl)
; ref: http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/
; 返り値は 51 (sl) となります。
mv
;Manual : カレントフォルダのファイルを移動します。
; (mv [-f] from to)
; 返り値は 0 となります。移動できなかった場合 1 となります。
; 第二引数のファイルが存在する場合などは、-f オプションが無ければ確認ダイアログが表示されます。
; 第二引数がフォルダである場合で、
; * 第一引数がファイルである場合は指定したフォルダに移動します。
; * 第一引数がフォルダである場合は指定したフォルダを上書き移動します。
; * 第一引数はls関数と同じファイル名の条件指定ができます。
(mv a.txt b.txt) ; カレントフォルダにあるファイル a.txt を b.txt に改名します。
(mv dir1\ dir2\) ; カレントフォルダにあるフォルダ dir1 を dir2 に改名します。
                 ; dir2 が存在する場合は中身を全て上書き移動します。
(mv *.txt dir\)  ; カレントフォルダにある全ての拡張子が txt のファイルを dir フォルダに移動します。
cp
;Manual : カレントフォルダのファイルを複写します。
; (cp [-f] from to)
; 返り値は 0 となります。複写できなかった場合 1 となります。
; 第二引数のファイルが存在する場合などは、-f オプションが無ければ確認ダイアログが表示されます。
; 第二引数がフォルダである場合で、
; * 第一引数がファイルである場合は指定したフォルダに複写します。
; * 第一引数がフォルダである場合は指定したフォルダを上書き複写します。
; * 第一引数はls関数と同じファイル名の条件指定ができます。
(cp a.txt b.txt) ; カレントフォルダにあるファイル a.txt を b.txt に複写します。
(cp dir1\ dir2\) ; カレントフォルダにあるフォルダ dir1 を dir2 に複写します。
                 ; dir2 が存在する場合は中身を全て上書きします。
(cp *.txt dir\)  ; カレントフォルダにある全ての拡張子が txt のファイルを dir フォルダに複写します。
rm
;Manual : カレントフォルダのファイルを削除します。
; (rm [-f] target)
; ごみ箱を介しません。ご注意ください。
; 返り値は 0 となります。削除できなかった場合 1 となります。
; -f オプションを指定しない限り確認ダイアログが表示されます。
; 第一引数はls関数と同じファイル名の条件指定ができます。
(rm a.txt) ; カレントフォルダにあるファイル a.txt 削除します。
(rm *.txt) ; カレントフォルダにある全ての拡張子が txt のファイルを削除します。
mkdir
;Manual : カレントフォルダに空フォルダを作成します。
; (mkdir target)
; 返り値は 0 となります。作成できなかった場合 1 となります。
(mkdir d)   ; カレントフォルダに、フォルダ d を作成します。
(mkdir d\e) ; カレントフォルダに、フォルダ d を、さらにその中にフォルダ e を作成します。
rmdir
;Manual : カレントフォルダの空フォルダを削除します。
; (rmdir [-f] target)
; ごみ箱を介しません。ご注意ください。
; 返り値は 0 となります。削除できなかった場合 1 となります。
; -f オプションを指定しない限り確認ダイアログが表示されます。
(rmdir d)   ; カレントフォルダにあるフォルダ d が空なら削除します。
(rmdir d\e) ; カレントフォルダ配下のフォルダ d\e が空ならばe、dの順に削除します。
beep
;Manual : ビープ音を鳴らします。
; (beep)
; 返り値は 0 となります。
(beep)          ; ビープ音を鳴らします。
play
;Manual : 簡易MMLを再生します。
; (play n1 [n2 ...])
; 返り値は 0 となります。
(play c)          ; ドの音を鳴らします。
;;; あくまで簡単なMML演奏です。分解能が細かくなると結構無理です。
;;; c~g、a、b は、順番にドレミファソラシを再生します。
;;; c2、c4 などと書く事によって二分音符、四分音符を鳴らします。数字を省略すると四分音符です。
;;; c2.、c4. などと書く事によって付点音符を鳴らします。
;;; l2、l4 などと書く事によって音長を省略した時の音長を設定します。
;;; c+、c- などと書く事によって半音上げたり、半音下げたりします。
;;; > と書くとオクターブを上げ、< と書くとオクターブを下げます。
;;; o4 と書くとオクターブを直接していできます(1~10まで、初期値は4)。
;;; t120 と書くとテンポを変更します(30~480まで、初期値は120)。
run
;Manual : 外部コマンドを実行します。
; (run command [arg1 arg2 ...])
; 返り値は 0 となります。エラーコードではありません。
; 引数部分は全て半角空白により結合されます。
(run calc)                              ; Windows標準の電卓を起動します。
(run iexplore https://www.mozilla.org/) ; IEでMozillaのWebサイトを開きます。
(run https://www.google.com/)           ; デフォルトブラウザが設定されているならば。
(run %homedrive%%homepath%\Pictures\Flowers001.JPG) ; 正常に関連付けがされているならば。
(run microsoft-edge:)                   ; UWPアプリケーションを起動する場合。
;;; 実行コマンドを " で囲むか、環境パスや8.3形式、*.lnkなどを駆使しないと、まともに使えません。
;;; 起動確認は実施しません。自己責任で。
wdrun
;Manual : 作業フォルダを指定して外部コマンドを実行します。
; (wdrun f1 command [arg1 arg2 ...])
; カレントフォルダの情報は維持されたままとなります。
; 他はrun関数と同じです。
eval
;Manual : JavaScriptにおけるeval命令を実行します。
; (eval formula)
(eval 12+34*56)         ; 1916を表示します。
(eval 'ABCDEFG'.length) ; 計算可能なら何でも可能かも知れません。
;;; 半角に変換できる全角英数(¥を含む)は半角に変換される事に注意。
;;; 途中に空白や括弧があると間違いなくバグります。
time
;Manual : 時刻を表示します。
; (time [n1])
; 第一引数を指定すると、第一引数のUnix時間(ミリ秒)を変換して表示します。
; 返り値は 0 となります。
(time)                ; 現在時刻を表示します。
(time 600125580000) \ ; 1970年1月1日0時0分から、600125580000ミリ秒後の時刻を表示します。
                      ; ちなみにこの時刻はmumed作者のトラウマです。
gtime
;Manual : 時刻を取得します。
; (gtime [n1 n2 ...])
; 第一引数以降を指定すると、第一引数以降を解析した結果をUnix時間(ミリ秒)を表示します。
; 返り値は 0 となります。
(gtime)                 ; 現在時刻のUnix時間を表示します。
(gtime 2001/9/11 21:46) ; アメリカ同時多発テロ事件の発生日時をUnix時間で表示します。
elapsed
;Manual : 経過時間を表示します。
; (elapsed expr)
; 第一引数のS式を実行し終わるまでの経過時間をミリ秒で表示します。
; 精度はシステムの時間分解能に依存します。
; 返り値は 演算結果となります。
(elapsed (+ 10 3))  ; 10+3にかかった経過時間を表示します。
(elapsed (sleep 1)) ; 1秒待機し、その経過時間を表示します。
sleep
;Manual : 指定した秒数ぶん待機します。
; (sleep n1 [n2 ...])
; 小数等でミリ秒まで指定できます。
; 引数が複数ある場合、それらを合算します。
; 待機する秒数は引数の絶対値です。
; 返り値は 0 となります。
(sleep 2/3)   ; 0.666秒待機します。
(sleep 2 -3)  ; 1秒待機します。
alias
;Manual : エイリアスもどきを作成します。
; (alias [-f] name [expression])
; [expression] を省略すると、エイリアスもどき name を削除します。
; 全ての引数を省略すると、エイリアスもどきを一覧出力します。
; 第一引数に -f をつけると、上書き・削除時に確認ダイアログを表示しません。
; 返り値は 0 となります。操作に失敗・キャンセルした場合 1 となります。
(alias kb 1024)        ; kb に 1024 を登録します。
(* kb kb)              ; 1048576を表示します。
(alias cmd (run cmd))  ; cmd に、コマンドプロンプトを起動させる命令を登録します。
(cmd)                  ; コマンドプロンプトが起動します。
(alias add (+ $*))     ; add に、加算関数を登録します。
(add 123 456 789)      ; 1368を表示します。
(alias add (* $*))     ; add の登録内容を変更します。
(alias -f add (/ $*))  ; add の登録内容を変更します(確認ダイアログなし)。
(alias add)            ; add の登録を解除します。
;;; エイリアスと思ってると痛い目を見ます。
;;; 英数字と_+-.を使用できます。大文字・小文字の区別はありません。
;;; 予約語、または先頭文字が数字か+-.の名前は使用できません。
;;; $1 ~ $9 で、その番目の引数を参照します。
;;; $* で、すべての引数を参照します。
;;; $% で、すべての引数を「%20」で連結して参照します。
;;; $# で、引数の数を参照します。
;;; エイリアスもどきはマイドキュメントの「mumed_profile」に保存します。
;;; cat等のファイル読み込み関数、run関数での使用を除き、再帰的な登録は不可能です。
init
;Manual : プロファイルを削除します。
; (init [-f])
; 第一引数に -f をつけると確認ダイアログを表示しません。
(init)        ; プロファイルを削除します。
(init -f)     ; 同様の動作をしますが、確認ダイアログを表示しません。
;;; マイドキュメント直下の「mumed_profile」を削除します。
;;; 現在プロファイルにはエイリアスもどきとカレントフォルダの情報を格納しています。
;;; アンインストールの際にご利用ください。
lambda
;Manual : ラムダ式もどきを用いて計算します。
; (lambda expr n1 [n2 n3 ...])
; 第一引数 にラムダ式もどきを指定します。
; 第二引数以降に、ラムダ式もどきに渡す引数を指定します。
; 返り値はラムダ式もどきで評価された「数値」です。
(lambda (+ $1 (* $2 $3)) 12 34 56) ; n1+n2*n3 (1916)を表示します。
(lambda (/ (+ $*) $#) 12 34 56 78) ; 引数の平均(45)を表示します。
;;; ラムダ式と思ってると痛い目を見ます。繰り返しますが返り値は関数ではありません。
;;; $1 ~ $9 で、その番目+1の引数を参照します。
;;; $* で、すべての引数-1を参照します。
;;; $% で、すべての引数を「%20」で連結して参照します。
;;; $# で、引数の数-1を参照します。
onerr
;Manual : エラー検知時、代替とする返り値を設定します。
; (onerr expr [n1])
; 第一引数 を計算中、エラーを検知した場合に、
; 第二引数を指定すると、その数値を返り値に設定します。
; 第二引数を省略すると、 0 を返り値に設定します。
; 第二引数のエラーは検知しません。
(onerr (atan (/ 1 0)) 24) ; 24を表示します(ゼロ除算エラー)。
(onerr (atan 1 0) 24)     ; π/2を表示します(ゼロ除算エラーではない)。
begin
;Manual : 複数の式を実行します。
; (begin e1 [e2 ..])
; 返り値は一番最後のS式のものとなります。
(begin (alias -f cmd (run cmd)) cmd (+ 1 2)) ; エイリアスもどきを登録後、それを実行し、1+2を表示します。
man
;Manual : 簡易マニュアルを表示します。
; (man [operator])
; 第一引数を省略すると、関数の一覧を表示します。
; 第一引数にエイリアスもどきを指定すると、その内容を表示します。
; 第一引数に「+文字」を指定すると、その文字を含む関数・エイリアスを検索します。
; 返り値は 0 となります。存在しない関数・エイリアスもどきが指定された場合は 1 となります。
(man)           ; 関数の一覧を表示します。
(man +)         ; 加算関数の説明を表示します。
(man +ma)       ; ma を含む関数・エイリアスもどきを検索します。
getenv
;Manual : 環境変数の一覧を表示します。
; (getenv [var])
; 第一引数に「+文字」を指定すると、その文字を含む環境変数を検索します。
(getenv)        ; 環境変数の一覧を実行可能なS式付きで表示します。
(getenv +sys)   ; sys を含む環境変数の一覧を実行可能なS式付きで表示します。
reserved
;Manual : 予約語を列挙します。
; (reserved)
; (man) と比べて出力フォーマット・機能は最低限です。
; 強調キーワード登録の際にご利用ください。
(reserved)      ; 予約語を列挙します。
numerics
;Manual : (man numerics) で数値型を解説します。
; ----------------------------------------------------------
; 整数型・整数リテラルとは、整数を扱うデータです。
; たぶん、当マクロにおいて型とリテラルの違いはありません。
; int関数によりあらゆる数字を整数型に変換します。
(man int)       ; int関数についての説明はこちらで。
; 分数型・小数型と演算すると自動的に型変換されます。
(+ 2 3/4)       ; 分数型に変換されます。
(+ 2 3.4)       ; 小数型に変換されます。
; ----------------------------------------------------------
; 分数型(リテラル)とは、分数を扱うデータです。
; 小数型と演算すると自動的に型変換されます。
(+ 3/4 1.4)     ; 小数型に型変換されます。
; 分母が1になると自動的に整数型に型変換されます。
(+ 3/4 1/4)     ; 整数型に型変換されます。
; ----------------------------------------------------------
; 小数型(リテラル)とは、小数を扱うデータです。
; float関数によりあらゆる数字を小数型に変換します。
(man float)     ; float関数についての説明はこちらで。
; 小数型は自動的に整数型・分数型に変換されません。
(+ 0.5 1/2)     ; 小数型のままです。
; 10進数表記の整数・小数表現に限り、eを用いた浮動小数点表記に対応します。
; 例え内容が整数だとしても小数型として扱われます。
(+ 2e3 4.5e-6)  ; 小数型同士の加算です。
; ----------------------------------------------------------
; 接頭語として#b・#o・#xを付けると、それぞれ2・8・16進数表記と扱われます。
(+ #b101 #b-10) ; 2進数表記です。
(+ 1 #o123/456) ; 8進数表記です。
(+ 1 #x-ABC.DE) ; 16進数表記です。
; ----------------------------------------------------------
; J(ava)Scriptの数値型は全て浮動小数型として扱われるため、
; かなり巨大な数を設定すると問答無用で指数表現となります。
(power 10 21)   ; 1e+21と表示されます。
; 浮動小数型には誤差という宿命があり、単純な計算でも予想外の結果となる時があります。
; そこそこ巨大な数を設定すると問答無用で情報落ちが発生します。
(power 3 40)    ; 有効桁数を超えたため、下位桁がゼロで埋まります。
(sin pi)        ; πにも有効桁数が決まっている為、正確なゼロにはなりません。
(cos pi)        ; 誤差があっても影響を受けない場合があります。
(+ 2 (sin pi))  ; sin(π) の誤差が 2 に対して非常に小さく、加算が無視されます。
symbols
;Manual : (man symbols) で特殊記号を解説します。
; ----------------------------------------------------------
; セミコロン「;」は行コメントアウトです。
+ 2 3 4 ; 5 6                ; 9を表示します。 5 と 6 の加算は無視されます。
; ----------------------------------------------------------
; 円記号「\」を行末に置くと次行へと接続します。
(+ 2 3 4 \                   ; …。
   5 6)                      ; 20を表示します。
; ----------------------------------------------------------
; ダブルクォーテーション「"」は囲み記号です。
; 二つの " に囲まれた空白はそのまま扱います。
(run "C:\Program Files")     ; 空白を挟んだフォルダを開きます。
; 「\"」と記述すれば、囲み記号ではない「"」として扱います。
(print Ans is " (* 9 8) ")   ; これと… 
(print Ans is \" (* 9 8) \") ; これの実行結果を比較してください。
; ----------------------------------------------------------
; 「%[0-9A-Za-z_\(\)]+%」が環境変数である場合、展開します。
(run %windir%)               ; 環境変数で示されたフォルダを開きます。
samples
;Manual : (man samples) でエイリアスもどきサンプルを表示します。
; ----------------------------------------------------------
; エイリアスもどきサンプル・定数系
;;; キロバイト
  (alias kb 1024)
  ; 使用例
  (* 2 kb)
;;; メガバイト
  (alias mb (* kb kb))
  ; 使用例
  (* 256 mb)
  ; 注:上述の kb を定義していないと 0 が表示される。
; ----------------------------------------------------------
; エイリアスもどきサンプル・数学系
;;; 三角数
  (alias tri (* $1 (+ $1 1) 1/2))
  ; 使用例
  (tri 10)
;;; 平均値
  (alias ave (/ (+ $*) $# 1.0))
  ; 注:分数で表示したい際は 1.0 を省く
  ; 使用例
  (ave 8 13 21 34)
; ----------------------------------------------------------
; エイリアスもどきサンプル・ランチャー系
;;; 単純に起動する
  (alias calc (run calc))
  ; 使用例
  (calc)
;;; 引数を渡して起動する
  (alias notepad (run notepad $*))
  (alias notepad (run "C:\WINDOWS\notepad.exe" $*))
  ; 使用例
  (notepad "C:\Program Files\gPad\readme.txt")
;;; %20で引数を連結して渡す
  (alias google (run https://www.google.com/search?q=$%))
  ; 使用例
  (google otter browser)
; ----------------------------------------------------------
; エイリアスもどきサンプル・小技系
;;; 省略可能な引数
  (alias optional (car $1 100))
  ; 使用例
  (optional 5)
  (optional)
;;; 0以下の数値なら0を返す
  (alias positive (onerr (max $1 (log $1)) 0))
  ; 使用例
  (positive 1)
  (positive 0)
  (positive -1)
; ----------------------------------------------------------
; エイリアスもどきサンプル・脳足りん系
;;; 体内時計チェッカー
  (alias body_clock (elapsed (alert "Push ok")))
;;; 好きな数だけ蒸気機関車を表示
  (+ sl sl sl sl sl)
mumed
;Manual : バージョン情報を表示します。
; (mumed)
(mumed)         ; バージョン情報を表示します。