Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala で 作る奇妙なプログラミング言語??

yuroyoro
April 29, 2012
16k

Scala で 作る奇妙なプログラミング言語??

2012/04/29
超エンジニアミーティング〜Happy Hacking!〜 in ニコニコ超会議meeting

yuroyoro

April 29, 2012
Tweet

Transcript

  1. {
    Scala で 作る
    奇妙な
    プログラミング言語??
    }
    1
    2012/04/29
    超エンジニアミーティングʙHappy
    Hacking!ʙ in ニコニコ超会議meeting
    12೥4݄29೔೔༵೔

    View full-size slide

  2. ID:yuroyoro
    ゆろよろ
    2
    お前、誰よ?
    12೥4݄29೔೔༵೔

    View full-size slide

  3. 株式会社ScaleOutで
    ろくろ廻してます
    3
    12೥4݄29೔೔༵೔

    View full-size slide

  4. http://scaleout.jp
    4
    12೥4݄29೔೔༵೔

    View full-size slide

  5. 「難解プログラミング言語」
    (Esoteric Programing Language)
    5
    12೥4݄29೔೔༵೔

    View full-size slide

  6. 難解プログラミング言語 (なんかいプロ
    グラミングげんご)とは、意図的に読解が
    困難なように設計されたプログラミング
    言語である。英語では、Esoteric
    programming language (略してesolang
    とも)と言われる。
    難解プログラミング言語 - Wikipedia
    http://ja.wikipedia.org/wiki/難解プログラミング言語
    6
    12೥4݄29೔೔༵೔

    View full-size slide

  7. 代表的なEsolang
    7
    12೥4݄29೔೔༵೔

    View full-size slide

  8. 8
    Brainf*ck
    +++++++++[>++++++++>+++++++++++>++
    +++<<<-]>.>++.+++++++..+++.>-.
    8つの命令(><+-.,[])でメモリ/ポインタを
    操作する。チューリング完全
    12೥4݄29೔೔༵೔

    View full-size slide

  9. 9
    Befunge
    v @_ v
    >0"!dlroW"v
    v :# <
    >" ,olleH" v
    二次元の格子状に命令が配置されてい
    る。行・桁数が意味をもつ。チューリン
    グ完全ではない
    12೥4݄29೔೔༵೔

    View full-size slide

  10. 10
    HQ9+
    H
    H/Q/9/+の4命令だけで構成される。H
    で”Hello, world!”を出力、Qは実行中の
    ソースコードを出力する(クワイン)
    12೥4݄29೔೔༵೔

    View full-size slide

  11. 11
    KEMURI
    ` |
    6つの命令からなるスタックマシン 。
    チューリング完全。 ` で”Hello,
    world!”をスタックに積む
    12೥4݄29೔೔༵೔

    View full-size slide

  12. Esolangは他にも
    まだまだあります。
    INTERCAL/Malbolge/
    Shakespeare/FALSE/
    Chef/...
    12
    12೥4݄29೔೔༵೔

    View full-size slide

  13. 「チューリングの泥沼
    (Turing tarpit)へ
    ようこそ」
    13
    12೥4݄29೔೔༵೔

    View full-size slide

  14. ねた言語作りは
    プログラマの嗜み
    14
    12೥4݄29೔೔༵೔

    View full-size slide

  15. 「○○だけで
    プログラミングできる言語」
    15
    12೥4݄29೔೔༵೔

    View full-size slide

  16. Lesson 1
    Brainf*ck派生
    16
    12೥4݄29೔೔༵೔

    View full-size slide

  17. Brainf*ckの8つの命令を
    任意の文字列に置き換える
    17
    12೥4݄29೔೔༵೔

    View full-size slide

  18. 名状しがたいプログラミング
    言語のようなもの Nyaruko
    18
    12೥4݄29೔೔༵೔

    View full-size slide

  19. > : "(」・ω・)」うー(/・ω・)/にゃー"
    + : "(」・ω・)」うー!(/・ω・)/にゃー"
    < : "(」・ω・)」うー!!(/・ω・)/にゃー!"
    - : "(」・ω・)」うー!!!(/・ω・)/にゃー!!"
    [ : "CHAOS☆CHAOS!"
    ] : "I WANNA CHAOS!"
    . : "Let's\(・ω・)/にゃー"
    , : "cosmic!"
    19
    12೥4݄29೔೔༵೔

    View full-size slide

  20. Demo
    20
    12೥4݄29೔೔༵೔

    View full-size slide

  21. 「Q:なんでScalaで書くの?」
    21
    12೥4݄29೔೔༵೔

    View full-size slide

  22. 「A:ParserCombinator」
    22
    12೥4݄29೔೔༵೔

    View full-size slide

  23. ParserCombinator
    構文解析ライブラリ
    23
    12೥4݄29೔೔༵೔

    View full-size slide

  24. // tokenは+-><,.のどれか
    def token =
    "+" ||| "-" ||| ">" ||| "<"||| ","||| "."
    24
    12೥4݄29೔೔༵೔

    View full-size slide

  25. // instructionはloopか
    // tokenかcomment
    def instruction =
    loop | token | comment
    25
    12೥4݄29೔೔༵೔

    View full-size slide

  26. // loopは、[instruction]
    // []の対応が取れていないと
    // 解析エラー
    def loop =
    “[“ ~> rep(instruction) <~ “]”
    26
    12೥4݄29೔೔༵೔

    View full-size slide

  27. // loopは、[instruction]
    // []の対応が取れていないと
    // 解析エラー
    def loop =
    “[“ ~> rep(loop | token | comment) <~ “]”
    27
    12೥4݄29೔೔༵೔

    View full-size slide

  28. // プログラムは
    // instructionの繰り返し
    def brainfuck =
    rep(instruction)
    28
    12೥4݄29೔೔༵೔

    View full-size slide

  29. ParserCombinator使うと
    構文解析できるし、
    命令の差し替えも簡単
    29
    12೥4݄29೔೔༵೔

    View full-size slide

  30. JoJo言語/Misa...
    30
    12೥4݄29೔೔༵೔

    View full-size slide

  31. Brainf*ck派生
    シンボル数: 8
    31
    12೥4݄29೔೔༵೔

    View full-size slide

  32. Lesson 2
    Grass派生
    32
    12೥4݄29೔೔༵೔

    View full-size slide

  33. 33
    Grass
    wvwWwwwwWwwwwwwWWWWWwWWWW
    WwwwwvwwwwWWWwwWwwWWWWWWw
    wwwWwwvwWWwWwwvwwWWwvwWWWw
    wWWWWWwwwWwwWWWWWWwWWWWW
    WWwWWWWwWWWWWwWWWWWWwWW
    「ちょっと草植えときますね型言語
    」。型無しラムダ計算をベースをした関
    数型言語。w/W/vの三文字を使う
    12೥4݄29೔೔༵೔

    View full-size slide

  34. スタック(初期状態)
    In
    W
    Succ
    Out
    34
    12೥4݄29೔೔༵೔

    View full-size slide

  35. 関数適用: App(m,n)
    WWW...(m個)...WWWwww...(n個)...www
    スタックのm番目の値を取り出しn番目の
    値に適用する。結果をスタックに積む。
    35
    12೥4݄29೔೔༵೔

    View full-size slide

  36. 関数定義: Abs(n)
    www...(n個)...www 関数適用*
    n個の引数をとる関数を定義してスタッ
    クにつむ。引数は、呼び出しの際に渡さ
    れた値がスタックに積まれる。関数本体
    は、関数適用の1回以上の繰り返し
    36
    12೥4݄29೔೔༵೔

    View full-size slide

  37. 例: wを出力する
    wWWwwww
    Abs( 1 )
    App( 2, 4 )
    1引数の関数定義
    スタックの2番目(Out)に4番目(w)を適

    Out(w) 37
    12೥4݄29೔೔༵೔

    View full-size slide

  38. w/W/vを
    違う文字列にしてみる
    38
    12೥4݄29೔೔༵೔

    View full-size slide

  39. プログラミング言語
    「ブブゼラ」
    w :ェ
    W : エ
    v : ベ
    39
    12೥4݄29೔೔༵೔

    View full-size slide

  40. ヴェ ベ ェエェェェェエェェェェェェエエエエエェエエエエエェェェェ ベ
    ェェェェエエエェェエェェエエエヴエエエェェェェエェェ ベ ェエエェエェェ ベ
    ェェエエェ ベ ェエエエェェエエエエエェェェエェヴェエエエエエエェエエエエエ
    エエェエエエエヴェエエエエエェエエエエエエェエエエエエエエエエエエエエ
    エェェェェェェェェエェエェエエエェェエエエエェェェェェェェエエエエエ
    ヴェェェェェェェエエエエエエェェェェェェェエエエエエエエエエエエエエエエ
    エエエエエエェェェェェヴェェェェェェェェェェェェェェェェ
    エェェェェェェェェェェェェェェェェェェェェエェェェェェェェェェェェェェ
    エェェェェェェエエェェェェェェエエエェェェェヴェェエエエエエ
    エェェェェェェェェェェェェェェェェェェェェエェェェェェェェェェェエ
    エェェェェエヴエエェェェェエエエエェエエエエ
    エェェェェェェェェェェェェェェェェェェエエエエエエエエエエエェエェェェエ
    エェエエエェエエエヴエェエエエエエエエエエエエエヴエエエエ
    エェェェェェェェェェェェェェェェェェ
    エェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェ
    ェェヴェエェェェェェェェェェェェエエェェェェェェェェェェェエエ
    エェェェェェェェエエエエェエエヴエエヴエェェェェェェェェエエエエヴエ
    エェェェェェェェェェェェェェェェェェェェェェエエエエエエ
    エェェェェェェェェェェェェェェェェェェェェェェェェェェェェエエヴエエエエ
    エエエェェェェェェェェ
    エェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェェエ
    エェェェェェェェェェェヴェェェエエエェェェェェェェェェェェェェエエエ
    エェェェェェェェェエエエエエェェェェェェェェェ
    ヴェェェェェェェェェェェェェェェヴェェエエエエエ
    エェェェェェェェェェェェェェェェェェェェェェェェェェ
    40
    12೥4݄29೔೔༵೔

    View full-size slide

  41. プログラミング言語
    「天使ちゃんマジ天使!」
    w : 天使
    W : マジ
    v : !
    41
    12೥4݄29೔೔༵೔

    View full-size slide

  42. 天使ちゃん ! 天使ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマ
    ジマジマジマジ天使マジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん ! 天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマ
    ジ天使天使ちゃんマジ天使天使ちゃんマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん ! 天使ちゃんマ
    ジマジ天使マジ天使天使ちゃん ! 天使ちゃん天使ちゃんマジマジ天使 ! 天使ちゃんマジマジマジ天使天使ちゃんマジマジマジマジマジ天
    使天使ちゃん天使ちゃんマジ天使天使ちゃんマジマジマジマジマジマジ天使マジマジマジマジマジマジマジ天使マジマジマジマジ天使マジマ
    ジマジマジマジ天使マジマジマジマジマジマジ天使マジマジマジマジマジマジマジマジマジマジマジマジマジマジ天使天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使マジ天使マジマジマジ天使天使ちゃんマジマジマジマジ天使天使ちゃん天使
    ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃんマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジマジマジマジマジ
    マジマジマジマジマジマジマジマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃ
    ん天使ちゃんマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使
    ちゃん天使ちゃんマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジ天使天使ちゃん天使ちゃん天使ちゃんマジ
    マジマジ天使天使ちゃん天使ちゃん天使ちゃんマジマジマジマジ天使マジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃんマジマジマジマジマジマジマジマジマジマジマジ天使マジ天使天使ちゃん天使ちゃんマジマジ天使マジマジマジ天使マジマジマジマジ
    天使マジマジマジマジマジマジマジマジマジマジマジマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃ
    ん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃ
    ん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジ天使天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃんマジマジマジマジ天使マジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃん天使ちゃんマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジ
    マジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃ
    ん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃん天使ちゃん天使ちゃんマジ天使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃ
    ん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジ天使天使ちゃん天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジ天使天使ちゃん天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジ天
    使天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジマジ天使天使ちゃん天使ちゃん天使ちゃん
    天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使
    ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃんマジマジマジマジマジマジ天使天
    使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃ
    ん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん天使ちゃん
    42
    12೥4݄29೔೔༵೔

    View full-size slide

  43. さらにパーサーをいじって
    43
    12೥4݄29೔೔༵೔

    View full-size slide

  44. プログラミング言語
    「ほむほむ」
    w : ほむ
    W : スペースに挟まれたほむ
    v : タブ/改行
    44
    12೥4݄29೔೔༵೔

    View full-size slide

  45. ほむ
    ほむ ほむ ほむほむほむほむ ほむ ほむほむほむほむほむほむ ほむほむほむほむほむ ほむ ほむほむほむほむほ
    む ほむほむほむほむ
    ほむほむほむほむ ほむほむほむ ほむほむ ほむ ほむほむ ほむほむほむほむほむほむ ほむほむほむほむ ほむ
    ほむほむ
    ほむ ほむほむ ほむ ほむ ほむほむ
    ほむほむ ほむほむ ほむ
    ほむ ほむほむほむ ほむほむ ほむほむほむほむほむ ほむほむほむ ほむ ほむほむ ほむほむほむほむほむほむ
    ほむ ほむほむほむほむほむほむほむ ほむ ほむほむほむほむ ほむ ほむほむほむほむほむ ほむ ほむほむほむほ
    むほむほむ ほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむほむほむほむほ
    むほむ ほむ ほむ ほむ ほむ ほむほむほむ ほむほむ ほむほむほむほむ ほむほむほむほむほむほむほむ ほむほ
    むほむほむほむ ほむほむほむほむほむほむほむ ほむほむほむほむほむほむ ほむほむほむほむほむほむほむ
    ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむ
    ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむ ほむほむほむほむほむ
    ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむ ほむほむほむほむほむほむほむほむ
    ほむほむほむほむほむ ほむ ほむほむほむほむほむほむ ほむほむ ほむほむほむほむほむほむ ほむほむほむ ほ
    むほむほむほむほむほむ ほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむ ほむ ほむほむほむほむほむほむほむほむほむほむ ほむほむ ほむほむほむ
    ほむ ほむほむほむ ほむほむほむほむ ほむほむほむほむ ほむ ほむほむほむほむほむ ほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむ ほ
    む ほむ ほむほむほむ ほむほむ ほむ ほむほむほむ ほむ ほむほむほむほむ ほむ ほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむ ほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむ ほむほむほむほむほ
    むほむほむほむほむほむほむ ほむほむ ほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむ ほむ
    ほむほむほむほむほむほむ ほむほむほむほむ ほむ ほむほむほむほむほむ ほむほむほむほむほむほむほむほ
    む ほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむ ほむほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむほむほむほむほむほむほむ ほ
    むほむほむほむほむほむほむほむ ほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむ ほむほむほむほむほむほ
    むほむほむほむほむほむほむほむ ほむほむほむ ほむほむほむほむほむほむほむほむほむほむほむほむほむ ほ
    むほむほむほむ ほむほむほむほむほむほむほむほむ ほむほむほむほむほむ ほむほむほむほむほむほむほむほ
    むほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむ ほむほむほむほむほむほ
    む ほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほむほ
    むほむ
    45
    12೥4݄29೔೔༵೔

    View full-size slide

  46. Grass派生
    シンボル数: 3
    46
    12೥4݄29೔೔༵೔

    View full-size slide

  47. Lesson 3
    Iota派生
    47
    12೥4݄29೔೔༵೔

    View full-size slide

  48. 48
    Iota
    **i*i*ii***i*i*i*ii***i*i*i*ii*ii**i*i*ii***i*i*i
    *ii**i*i*ii****i*i*i*ii*ii*ii***i*i*i*ii***i*i*i*
    ii**i*i*ii*i*i*i*ii*i*i*ii*ii***i*i*i*ii***i*i*i*ii
    **i*i*ii*i*i*i*ii*i*i*ii***i*i*i*ii***i*i*i*ii**i
    *i*ii*i*i*i*ii*i*i*ii****i*i*i*ii***i*i*i*ii*ii*ii
    コンビネータ理論を元にSKIコンビネー
    タをιコンビネータと適用で表現した関
    数型言語。Unlambda派生。
    12೥4݄29೔೔༵೔

    View full-size slide

  49. SKIコンビネータで
    あらゆる計算を
    表現できるので
    49
    12೥4݄29೔೔༵೔

    View full-size slide

  50. 構文の説明とかタルいので
    skk = i
    i = *ι
    k = *ι*ι*ι ι
    s = *ι*ι*ι*ι ι
    50
    12೥4݄29೔೔༵೔

    View full-size slide

  51. シンボルを変えてみる
    51
    12೥4݄29೔೔༵೔

    View full-size slide

  52. Iota版
    「名状しがたいプログラミング言語のようなもの」
    * = (」・ω・)」うー!(/・ω・)/にゃー!
    i = スペース
    52
    12೥4݄29೔೔༵೔

    View full-size slide

  53. (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・
    ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・
    ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!
    (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・
    ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・
    ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/
    にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」
    うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/
    にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」
    うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー!
    (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー! (」・ω・)」うー!(/・
    ω・)/にゃー! (」・ω・)」うー!(/・ω・)/にゃー!(」・ω・)」うー!(/・ω・)/にゃー! (」・
    53
    12೥4݄29೔೔༵೔

    View full-size slide

  54. IotaからJotが派生
    Unlambda + Iota + Jot =
    LazyK
    54
    12೥4݄29೔೔༵೔

    View full-size slide

  55. シンボル数2なので
    任意のバイト列を
    Iotaプログラムと
    みなせる
    55
    12೥4݄29೔೔༵೔

    View full-size slide

  56. 56
    謎プログラミング言語UCAS
    ᖪᖫᓫᔧᕏᕔᒨᕕᔨᒪᖫᓕᕕᕓᓫᔻᕎᒖᒖᑶᒞᒧᕋᕋᔾᒨᒪᑊ
    ᖫᓫᔶᑖᑕᔶᑶᒞᒥᖪᖫᓫᔶᑖᑕᗫᔻᕎᒖᒖᑏᕔᒨᒪᖫᓕ
    ᕕᕓᓫᔻᕎᒖᒖᑻᕊᑶᒞᒧᕋᕋᔧᕏᕔᕕᔶᑶᒛᔾᒥᔻᕏ
    ᕔᒦᒦᒔᖫᒔᕕᗖᑫᒫᒪᖫᓫᔶᑖᑕᔶᑶᒞᒥᖪᖫᓕᗫᔥᗖ
    ᑶᒛᔫᔫᒟᕓᒞᒨᒪᕓᕓᕏᕔᕕᖪᒪᒥᖪᖫᓫᔧᕏᕔᕕᖪᒪ
    Unicodeコードポイントから5121を差し
    引いた数のビット列をiotaコードと見な
    す。
    12೥4݄29೔೔༵೔

    View full-size slide

  57. Iota派生
    シンボル数: 2
    57
    12೥4݄29೔೔༵೔

    View full-size slide

  58. Lesson4
    プログラミング言語A
    58
    12೥4݄29೔೔༵೔

    View full-size slide

  59. どうにかシンボル数を
    1にできないか?
    59
    12೥4݄29೔೔༵೔

    View full-size slide

  60. 60
    A
    Aが8進数で
    2222222226022222222022222222222022
    22211137040224222222244222403433333
    33333334122222222433333333422243333
    334333333334024
    個つづく
    Aを並べた数がプログラムになる。Aの数
    を8で割った剰余がbrainf*ckの命令にな
    り、商が7以下になるまで繰り返す
    12೥4݄29೔೔༵೔

    View full-size slide

  61. 問題点:
    Hello world!を出力するプログ
    ラムを格納するディスク容量
    が地球上に存在しない
    61
    12೥4݄29೔೔༵೔

    View full-size slide

  62. 約10の134乗kbyte
    62
    12೥4݄29೔೔༵೔

    View full-size slide

  63. 「人類には早すぎたプログラ
    ミング言語 A」
    63
    12೥4݄29೔೔༵೔

    View full-size slide

  64. Lesson5
    おわりに
    64
    12೥4݄29೔೔༵೔

    View full-size slide

  65. esolang処理系を
    自分で書いておくと
    いろいろいいことある
    65
    12೥4݄29೔೔༵೔

    View full-size slide

  66. コンパイラ/処理系/ポインタ/
    レジスタ/スタック/ラムダ計
    算/コンビネータ理論/...
    の勉強になる
    66
    12೥4݄29೔೔༵೔

    View full-size slide

  67. インターネット上の
    トレンドに対する
    瞬発力向上
    67
    12೥4݄29೔೔༵೔

    View full-size slide

  68. ギズモードデビューorz
    68
    12೥4݄29೔೔༵೔

    View full-size slide

  69. 本日のコード
    宇宙的な深淵から這い寄る名状しがたいプログラミング言語が見る者のSAN値を
    容赦なくすり減らすプロジェクト
    yuroyoro/esoteric-languages-on-scala :
    https://github.com/yuroyoro/esoteric-languages-on-scala
    69
    12೥4݄29೔೔༵೔

    View full-size slide

  70. おわりです
    70
    12೥4݄29೔೔༵೔

    View full-size slide