Esolang Ame
github pagesにあったものをこちらに移行(2014 2/27 16:00)
これはEsolang Advent Calandar 2012の5日目の記事です。
Esolangも言語系もよく知らない私が深いこと考えないで行きあたりばったりで作った言語です。
作ってからそれとなく「Whitespaceに似てるなぁ」とか思ったのは内緒です。
Ameという名前の由来は見た目から。
/ // ../ ./ . /| / / /| | / // | |/| /| |. /|| |/ |/ | |/. /| |/ / /| ||/. /|/. /| __,__ / /. /| / / / \ \| / |/ ^^^^^^l^^^^^^ /! ./ 雨だね。 l∧_∧ /!.. 傘いるかいl´・ω・`) 0⊂ ) し─J
特徴
1. 多分スタック指向
多分というのは、スタックが2つ(WM,LTM)と変数(tmp)があるため。
これはswapが文法上難しかったための代替手段で、2番目のスタックを変数にpullできるpull2コマンドと、他のデータの保管用のスタックがもう一つあるためこれでswapできます。
そのこともあり、演算結果はpushされずにtmpに代入されるという。ここきもい
2. 3進数で表現
2進数だと長い。なるべく少ない文字数で難読に作りたい。よって3進数。
3. 4文字使用(他はスペース含めコメント)
使う文字:/|.!
語彙
数値宣言
"/"と"!"の間に3進数で記入。
ただし、最高位は右側。 {0:/, 1:|, 2:.}
////|!:27 /...!:26
コマンドなど
command | meaning | command | meaning | example | |
.// | WM.push | !// | + | WM[1]+WM[0] | |
.|/ | WM.pull | !|/ | - | WM[1]-WM[0] | |
../ | WM.pull2 | !./ | ∗ | WM[1]∗WM[0] | |
./| | LTM.push | !/| | / | WM[1]/WM[0] | |
.|| | LTM.pull | !|| | % | WM[1]%WM[0] | |
..| | LTM.pull2 | !.| | < | 1 if WM[1]<WM[0] else 0 | |
./. | WM.top | !/. | if | if WM[0]==0: | |
.|. | LTM.top | !|. | while | while WM[0]!=0: | |
... | loop,ifの終わりEnd | !.. | print(str(WM[0]),end='') |
すべてWM上の操作で演算後はpushされずにtmpに代入される
str()とは
3進数で5桁区切りでASCIIコードに変換する