cocuh's note

type(あうとぷっと) -> 駄文

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 print(str(WM[0]),end='')

すべてWM上の操作で演算後はpushされずにtmpに代入される

str()とは

3進数で5桁区切りでASCIIコードに変換する

開発環境

Python2.7.3で組みましたが、Python3.xでも動くようにしてあります。
難読言語だしコードも難読じゃないとと思ってワンライナーで書きました。

github
にあげたのでよければどぞ。 sampleでHelloworldとfizzbuzzだけはつくりました。

ソースコード

Pythonと思えない。
f:id:cocu_628496:20140227155945j:plain