Grass 言語というプログラミング言語があります。
esolangs.org オリジナルの製作者 (UENO Katsuhiro さん) のサイトが2025年1月頃を最後に消えているので参照先が海外の Wiki しかない...
今回は Grass 言語に入門してみます。まずは Hello,world! を表示するのが基本の "き" ですね。
Grass 言語で Hello,world! に挑戦
Hello,world! を書くぞ!
wwwwWWWWwwWWWWwwwWwwwWWWwvwwwWWwWWWWwvwwWWwWWWwvwwWWwWWWwWWWWwvwwWWwWWWwWWWWwWWW WWwWWWWWWwvwWWWWWWwwwwWwwwvWwWWWWwwwwwvwWWWWWWWWWwwwwwWwwwwwwwWWWWWWWWWWWwWwwwww wwwwvWwvwWWWWWWWWWWWwwWwwwvWwvwWWWWWWWWWWWWwwwwwwwwwwwWwwwwwwwwwwwwWWWWWWWWWWWWW WwWwwwwwwwwwwvWwvwWWWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWWWWWWWwWwwwwwwvWwvwWWwwwwwwww wwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwvwWWwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWwwwwwwwwwww wwwwwwwwwwwWwwvwWWwWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwWwwvwWWwWWWWWWWWwwwwwwwwwwww wwwwwwwwwwwWwwvwWWwWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwWwwvwWWwWWWWWWWWWWWWWWWWWWWW WWWWWwvwWWWwWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwWwwvwWWwWWWWWWWWWWWWWWWWW WWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwvwWWwWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwww wwwwwwwwwwwWwwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWwvwWWWWWWWWwWWWwWWWWWWWWwWWWWWwWWWWWW WWWwWWWWWWWwWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWwWWWW WWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWwwwwWWWWWWWWWWWW WWWWwWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWW WWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWWWWWWWWw
よし書いた。
実行してみよう。
$ npx @susisu/grass-js helloworld.minify.grass Hello,world!
ヨシ! 👈⛑️
何がどうなっている?
これでは何もわからないと思うので、インデントやコメントを入れたバージョンを置いておきます。
// In // _grass_ // Succ // Out // λm.λn.λf.λx.m f (n f x) wwww WWWWww WWWWwww Wwww WWWw v // add // λm.λ.n.λf.m (n f) www WWw WWWWw v // times // λf.λx.f (f x) ww WWw WWWw v // 2 // λf.λx.f (f (f x)) ww WWw WWWw WWWWw v // 3 // λf.λx.f (f (f (f (f x)))) ww WWw WWWw WWWWw WWWWWw WWWWWWw v // 5 w WWWWWW wwww /* add 2 */ W www /* _ 5 */ v // const 7 Ww v // 7 WWWW wwwww /* 3 2 = 2^3 => 8 */ v // 8 w WWWWWWWWW wwwww /* add 5 */ W wwwwwww /* _ 3 */ WWWWWWWWWWW w /* add _ */ W wwwwwwwww /* _ 3 */ v // const 11 Ww v // 11 w WWWWWWWWWWW ww /* add 11 */ W www /* _ 11 */ v // const 22 Ww v // 22 w WWWWWWWWWWWW wwwwwwwwwww /* times 2 */ W wwwwwwwwwwww /* _ 2 */ WWWWWWWWWWWWWW w /* times _ */ W wwwwwwwwww /* _ 7 */ v // const 28 Ww v // 28 w WWWWWWWWWWWW wwwwwwwwwww /* 3 5 */ WWWWWWWWWWWWWWWW w /* add _ */ W wwwwww /* _ 22 */ v // const 147 Ww v // 147 w WW wwwwwwwwwwwwwwwwwww /* 147 Succ */ W wwwwwwwwwwwwwwwwwwwww /* _ _grass_ */ v // const \n w WW w /* \n */ WWWWWWWWWWWWWWWWWWWWW w /* Succ \n => VT */ WWWWWWWWW wwwwwwwwwwwwwwwwwwwwww /* 22 Succ */ W ww /* _ VT => ! */ v // const ! w WW w /* ! */ WWWWWWWWWWW wwwwwwwwwwwwwwwwwwwwww /* 11 Succ */ W ww /* _ ! => , */ v // const , w WW w /* , */ WWWWWWWW wwwwwwwwwwwwwwwwwwwwwww /* 28 Succ */ W ww /* _ , => H */ v // const H w WW w /* H */ WWWWWWWWW wwwwwwwwwwwwwwwwwwwwwwww /* 28 Succ */ W ww /* _ H => d */ v // const d w WW w /* d */ WWWWWWWWWWWWWWWWWWWWWWWWW w /* Succ _ => e */ v // const e w WWW w /* d */ WWWWWWWWWWWWWWWWW wwwwwwwwwwwwwwwwwwwwwwwwww /* 8 Succ */ W ww /* _ d => l */ v // const l w WW w /* l */ WWWWWWWWWWWWWWWWWWWWWW wwwwwwwwwwwwwwwwwwwwwwwwwww /* 3 Succ */ W ww /* _ l => o */ v // const o w WW w /* o */ WWWWWWWWWWWWWWWWWWWWWWW wwwwwwwwwwwwwwwwwwwwwwwwwwww /* 3 Succ */ W ww /* _ o => r */ v // const r w WWWWWWWWWWWWWWWWWWWWWWWWWWW w /* Out _arg1_ */ v // Out // main w WWWWWWWW w /* H */ WWW w /* Out H */ WWWWWWWW w /* e */ WWWWW w /* Out e */ WWWWWWWWW w /* l */ WWWWWWW w /* Out l */ WWWWWWWW w /* Out l */ WWWWWWWWWWW w /* o */ WWWWWWWWWW w /* Out o */ WWWWWWWWWWWWWWWWWW w /* , */ WWWWWWWWWWWW w /* Out , */ WWWWWWWWWWWWW wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww /* Out _grass_ */ WWWWWWWWWWWWWW wwww /* Out o */ WWWWWWWWWWWWWWWW w /* r */ WWWWWWWWWWWWWWWW w /* Out r */ WWWWWWWWWWWWWWWWW wwwwwwwww /* Out l */ WWWWWWWWWWWWWWWWWWWWWWW w /* d */ WWWWWWWWWWWWWWWWWWW w /* Out d */ WWWWWWWWWWWWWWWWWWWWWWWWWWWW w /* ! */ WWWWWWWWWWWWWWWWWWWWW w /* Out ! */ WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW w /* \n */ WWWWWWWWWWWWWWWWWWWWWWW w /* Out \n */
解説は諦めます。
補足
今回書いたコードをここに置いておきます。
プログラムの実行には id:susisu さんの JavaScript 実装を使いました。npx で実行すればインストールも何も不要で便利。
Grass 言語の言語仕様や動作原理については公式サイトが詳しいです。
でも消えてしまっているので Wayback Machine などを漁る必要あり。
まとめ
そろそろ Grass 言語を理解したいと思い立って勉強してみました。めちゃくちゃ大変だった...。
私からは以上です。
おまけ
そのほかの Hello,world! シリーズはこちら