Grass言語難しすぎWWWワロタWWWWWW

うはwwWWwWWWwvwwWWwWWWwWWWW。
マイナーwvなプログラミング言語wwwいろいろ調べてたらちょっと草植えときますね型言語 GrasswWWWwwWなんての見つけたwwWWWWWWwwwwWww。
これはひどいvwwwWWw。というかすごいWWWW。
なにしろ使う文字が「w」と「v」と「W」しかないWwwwwW。超簡単wwwwWWWwwwwww。
でもやってみるとすげー難しいWwwwwwwWwww。難しすぎwwwwWWWWWWwwW。
ぜんぜん歯が立たないwwwwwwwwww。Hello World!さえ書けないWWWWWWWW。
でもくやしいので勉強してみるwWwwwwwww。うはWWWWWWWWWWW、前向きwWww。


それにしても、これが累乗wwwwを表すとかWWWWWWWWWWWWW、まじありえなくない?wwwww

wwWww

もうなんていうかwwwwww、ごめんなさいWWWWWWWWWWWWWWW。いきなり撃沈ww。


なんかねwwwwwwwwwwWwwvw、ラムダ計算WWWWWWWWとかWWW、チャーチ数WWWWWWとか、分かってないと書けないみたいWWWWWwvWWwWwwwwwww。見た目と違って異常に理論的wwwwwwwwww。


それでもうはwww Mosh で Grass 実装したwwww - ひげぽん OSとか作っちゃうかMona-とかじっくり読んでいくとWWWwWWWWなんとか理解できるかもwWWWWWwWWWWWWwWWWWWWWwWWW。
ううむWWWWWwWWWWWWWWWw。
SUCC := λn f x. f (n f x)とかWWWWWWWWWWw難しいなーWWWWWWWWWWWwWWWWWWWWWWW。
これはWwWWWそうとうWWWWWWWW本気出さないとWWwWWWWWWWWWW理解できそうもないWWWWwWWWWWWWWWWWWWWWWWWW。


LispでGrass解説 (俺専用) - * *scrap*もかなり分かりやすいWwwwwwwwwwwwwwwwvw。
CommonLispの知識前提WWWWWWWWWWWWWWWWWだけどねwvWWwwwwwwwwwwwってwwwwwwwwそれ敷居高いよーwwwwwwwww。


ふむふむ、これがチャーチ数でいうところの3だってwwww。えーwwwww。

wwWWwWWWwWWWWw

λf x. f (f (f x)) とか解説されてるけどWWWWWwWWWWWWw、要はこの「3」WWWWWWWwってやつに関数を放り込むWWWWWWWWと3回実行する関数にしてくれるみたいwWWWWWWWWWw。うはWWWなんか分かってきたWWWWWWWwWWWWWWWWW。意味合い的には「3」てよりWWwWW「3回」ってことなのかWWWWWWWWWW。


さっきからいっぱいw使っててふざけてるWWWWWWWWWように見えるけどWWWWwWW本気だからねWWWWWWWW。まじでWWWWwWWWWW。


それでこのGrass言語ってやつは、文字を出力(OUT)WWWWWWWWWWするか、入力(IN)wWWWWWWWWWWするか、文字コードをインクリメント(SUCC)WWWWWWwWWWWWするか、しか機能がないのだなWWWWWWWWWWWWwWWWW。
でWWWWW、初期状態で与えられている文字WWWWWWWWWが小文字の「w」であるとWWWWWWWW。どんだけWWWWWWWWWWWwWWWWWWWWWWWWWWW。
それ以外の文字WWWWWはSUCCして作れwvw、とWWWWWWWWWWWWWWWWWW。えーめんどくさいWWWWWWWWWWWWWWWWWWWWWWWW。


でラムダ計算WWWWWWWWWWWWWWWWwvWをつかうとIFwwwwwwwwwwwwww文のような構造とかWWwwwWWWw、TRUE/FALSEといったことWWWWwwwwも表現できるんだってwwwwwWWWWWwwwwwww。全然理解できてないけどねwwwwwwwwwwwwwwwwwwwwwWWWWWWwwwwww。


さらに再帰wwwwwwwwwwwwwwwwwwをするにはYコンビネータwwwwだって書けちゃうとかwwwwwwwwwwww。でたなラスボスWWWWWWWw、YコンビネータWWWWWWWW。
これ何回勉強してもwwwwwwwwwwwwwwよくわかんないんだよなーwwwwwwwwwwwwww。
でも関数型言語とかWWWWWWWWWマスターするには避けて通れないっぽいねwwwwwwwwwwwww。


任意の文字を出力するときは、インクリメントする数だけSUCCを書いてもwwwwwwwwいいんだけどWWWWWWWWWW、そこはそれwwwwwwwwwwwwwwwwwwww。チャーチ数WWWWWWWWWWWで数字を作ってそれにSUCCを与えるとwwwwwwwwwwww好きな回数wwwwwwwwwwwwwwwインクリメントする関数ができるWWWWWWWWWWWW。


でもスタート文字が「w」なんで、欲しいのはインクリメントよりもwwwデクリメントなんですけどwwwwwwww。


チャーチ数で大きな数wwwwwwwwwを作るには累乗するのが簡単WWWWWWWWWWWWWwwwww。
4の4乗とかで256WWWWWWWWWWWWWWなんてすぐに作れるwwwwwwwww。
ちょwwwwwwwwwwwwwwwwwwwwwwww、256回SUCCしたら元に戻っちゃうじゃんWWWWWWWWWWWWWWW。だめじゃんwwwwwwwwwww。


しかしなにが一番大変かってwwwwwwwwwwwwwwwwwww関数や適用wwwwwwwwwwwwwwwwwwwwへのアドレス指定がスタックWWWWWWWWWWWWWWWWであるってことwwwwwwwwwwwwwwwwwwwwwww。
つまりスタックWWWWWWWWWWWWWWWWWが積まれるたびにアドレス?wwwwwが増えるwWWWWWWWWWWWWWWWWWW。
うはwwwwwwwwwwwwwww最凶WWWWWWWWWWWWWWWW。


しかもGrassではひとつ操作WWWするたびにスタックがひとつ積まれるwwwwwwwwwwww。なにこれWWWWWWWWWWWWWWWWW。
なのでWWWプログラムの後ろの方wwwになると、スタックの最深部にある「w」とかOUTとかを指定するのにすげーwww長い指定が必要になるwwwwwwwwwwwwwwwwwwwwwwwwwww。


App(21,24) …… 21番目の深さにある関数に24番目の深さにある値を適用

WWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwww

みたいなWWWWWWWWWW。
そんなわけWWWWWWWWWWWWでGrassのプログラムはどんどん伸びるwwwwwwwww伸びるWWWWW。


というわけでWWW、今回Grass言語に挑戦してみましたがWWWWWWWWWWWWWWW、良い子の諸君wwwwwwならお気づきのとおりwwwwwwwwwwwwwwwwwww、このエントリー自体WWWWWWWがGrassのプログラムになっててWWWWWWWWWWWWWWWWWw、実行するとWWWWWWWWWWWWWWW秘密のメッセージが……WWWWWWW。(UTF-8推奨WWW)。
みたいなwwwwww。