矢澤にこ言語が完成(※)しました

Haskell製にこ言語

合宿所の近くの海

謎の集団で合宿に行ってきた

 某所に技術関連の集まりで技術合宿をしてきました。
各位、目的は各々で決めていく感じの3日連続もくもく会という感じです。

  • 僕の主観内で観測された各位の動き
    • DeepLearning
      • Tensorflow
    • VR
      • Unity + Android
    • ラズパイ電子工作
      • Lチカ
    • AngularJS1の勉強
    • Javaの勉強
    • CentOSデスクトップ環境構築
      • Archデスクトップ環境構築だったはずが、いつの間にかCentOSに変わっていた
    • LinuQuestという謎の企画について

DeepLearningの挫折から入る

  • 僕の合宿の予定

    1. にこちゃん作りたい
    2. にこちゃん作りたいので、深層学習学ぶ
    3. 深層学習で「にこちゃんへたれ判定bot」を作る
  • 実際

    1. にこちゃん作りたい
    2. Tensorflow学ぶ
    3. Tensorflow難しすぎてムリになる

ということで、にこちゃん言語の定義と処理系作成に馳せ参じることになりました。

にこ言語

にこ言語とは

 Brainf*ckの方言です。

 Brainf*ckの各命令(以下の表の左辺)は、右辺の文字列に割当たります。

> : 笑顔届ける矢澤にこにこ!
< : だめだめだめっ!
+ : にっこにっこにー
- : にこにーって覚えてラブニコ!
. : ぴょんぴょんぴょんっ!
, : あなたのハートににこにこにー!
[ : にこにーはみんなのもの!
] : キモチワルイ

 BNFの練習のためにも、意味論はBNFで書いてみました。
こんな感じ。

<code>       ::= <empty-code> | <operation> | <operation> <code>
<empty-code> ::= ""

<operation> ::= <forward> | <backword> | <increment> | <decrement> | <output> | <input> | <loop>

<loop> ::= <loop-begin> <code> <loop-end>

<forward>    ::= "笑顔届ける矢澤にこにこ!"
<backword>   ::= "だめだめだめっ!"
<increment>  ::= "にっこにっこにー"
<decrement>  ::= "にこにーって覚えてラブニコ!"
<output>     ::= "ぴょんぴょんぴょんっ!"
<input>      ::= "あなたのハートににこにこにー!"
<loop-begin> ::= "にこにーはみんなのもの!"
<loop-end>   ::= "キモチワルイ"

 「Hello」と出力するコードはこうなります。

笑顔届ける矢澤にこにこ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにこにーはみんなのもの!だめだめだめっ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにー笑顔届ける矢澤にこにこ!にこにーって覚えてラブニコ!キモチワルイだめだめだめっ!ぴょんぴょんぴょんっ!笑顔届ける矢澤にこにこ!笑顔届ける矢澤にこにこ!にっこにっこにーにっこにっこにーにっこにっこにーにこにーはみんなのもの!だめだめだめっ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにー笑顔届ける矢澤にこにこ!にこにーって覚えてラブニコ!キモチワルイだめだめだめっ!ぴょんぴょんぴょんっ!笑顔届ける矢澤にこにこ!笑顔届ける矢澤にこにこ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにこにーはみんなのもの!だめだめだめっ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにー笑顔届ける矢澤にこにこ!にこにーって覚えてラブニコ!キモチワルイだめだめだめっ!ぴょんぴょんぴょんっ!笑顔届ける矢澤にこにこ!笑顔届ける矢澤にこにこ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにこにーはみんなのもの!だめだめだめっ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにー笑顔届ける矢澤にこにこ!にこにーって覚えてラブニコ!キモチワルイだめだめだめっ!ぴょんぴょんぴょんっ!笑顔届ける矢澤にこにこ!笑顔届ける矢澤にこにこ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにこにーはみんなのもの!だめだめだめっ!にっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにーにっこにっこにー笑顔届ける矢澤にこにこ!にこにーって覚えてラブニコ!キモチワルイだめだめだめっ!にっこにっこにーぴょんぴょんぴょんっ!笑顔届ける矢澤にこにこ!

いいね!

椰子の木みたいなの

合宿中進捗について

 パーサーと、デバッグのためのBrainf*ck形式への変換までを実装しました。
というわけで、本記事のタイトル中の「」の回収です。

合宿中の最後のcommitはこれになります。

合宿での学び

 にこ言語はHaskellで開発しているのですが、Haskellの型システム周りは最強なので、こういったことができます。

 短い合宿期間中(※)の結構な部分は、この学び及びHaskellのテスト技法の探りに費やされましたが、わりといい学びだったと思います。
誰かHaskellのtastyでの、IO ()での標準入力と標準出力の扱い方を教えて。

※ 2泊3日中の1日目はDeepLeaningで潰した

夜の海

結論

 合宿中に にこ言語 完成しなかったよ…。

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。