注:今回は薄い本(技術同人誌)向けのネタ話です。
インプレスR&D社さんから出版した「Elixirへのいざない」*1の献本が届きました。
同人誌の時も思いましたが、製本されてるものを見ると、心が弾むものですね。
特に、表紙の女の子が可愛いです。
それで、表紙の女の子みてて思いつきました。
「この子を使って薄い本(技術同人誌)を書けないかなぁ」と。
キャラ名
表紙の女の子、可愛いですね。(2回目)
まぁ、それは置いといて名前がないと動かしづらいなぁ、と。
というわけで、「名前をつけよう」と思いたつ。
真っ先に思いついた候補が「食官木木見晴」。うん、ダメだ(笑
んで、Elixir(エリクサー)なんだから、「エリィ」でいいかなぁ、と安直に考える。
まぁ、女の子の名前は出来たと。
ただ、相方(or話相手)が欲しいなぁ、と。
できれば人間。
ここで、ElixirはErlang VM上で動くのでErlangの子供のようなもの...つまり、Erlang(アーラン)は親...。
はい、お父さんの名前は「アラン」に決定!
まぁ、「アラン」は女性名にも使えるっぽいので、もしかしたらエリィと同年代の女の子に変わる可能性もあるかも。
「Elixirはのいざない」の献本が届きました。表紙の女の子がかわいいなぁ。
— みずりゅ(「Elixirへのいざない」技術の泉シリーズで出版:しがないラジオsp65出演) (@MzRyuKa) 2020年6月13日
この娘の名前はエリィちゃん(仮)とでも名付けようかな。そして、お父さんはアラン(仮)とでも名付けよう。 pic.twitter.com/z2SorUK46Y
せっかく名前をつけてみたので、次はお話を書いてみよう。
第1話:束縛してみよう
Elixir使いの少女エリィは、Erlang使いの父アランと総合格闘プログラミング*2の練習を繰り広げるのであった。
アラン「さぁ、今日も練習を始めよう。エリィ、REPL*3 を開いて」
$erl Erlang/OTP 22 [erts-10.7.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Eshell V10.7.1 (abort with ^G)
エリィ「はい、お父さん」
$iex Erlang/OTP 22 [erts-10.7.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Interactive Elixir (1.10.3) - press Ctrl+C to exit (type h() ENTER for help)
アラン「いいかいエリィ。束縛*4とは、こうするんだ」
1> Hoge = 10. 10
エリィ「…こう?」
iex(1)> Hoge = 10 ** (MatchError) no match of right hand side value: 10
エリィ「あれ?」
アラン「ははは。最後に『.』(ドット)をつけなかったのは良かったぞ。でも、私の使うErlangでは変数名は大文字から始めないといけないが、エリィの使うElixirでは変数名は小文字から始めないといけないだろう」
エリィ「…あ、そうか。ええと、先頭を小文字にして、えい!」
iex(1)> hoge = 10 10
アラン「良くできたね。でも、束縛に使った変数は使いまわせないから注意しような」
2> Hoge = 20. ** exception error: no match of right hand side value 20
エリィ「...あれ?再束縛ができちゃったよ」
iex(2)> hoge = 20 20
アラン「んなっ!」
エリィ「あ!でもキャレット(『^』)を付けていると、再束縛できないや」*5
ex(3)> ^hoge = 20 20 iex(4)> ^hoge = 30 ** (MatchError) no match of right hand side value: 30 iex(4)> hoge = 30 30
アラン「...(この子には私以上の秘めた力があるのか)」*6
元ネタ
アラン「いいかい、エリィ。束縛とはこうするんだ!」
— みずりゅ(「Elixirへのいざない」技術の泉シリーズで出版:しがないラジオsp65出演) (@MzRyuKa) 2020年6月13日
エリィ「…こう?」
アラン「そう。良くできたね。でも、束縛に使った変数は使いまわせないから注意しような」
エリィ「あれ?再束縛ができちゃったよ」
アラン「んなっ!(この子には私以上の秘めた力があるのか)」
…なんて薄い本をはやしたい https://t.co/YNHXbvXwhO
補足:束縛とは
ちなみに、「代入」と「束縛」の違いについて。
代入が「変数という箱に対して値をしまう」に対して、束縛は「変数自身が(右辺で指定した)値と同じである」という認識です。*7
下記の例だとわかりやすいでしょうか。
この場合、変数「hoge」は「20」に束縛したので「20」と同じになります。
そして、20とのパターンマッチは成立しますが、30とのパターンマッチは成立しません。
iex> 20 20 iex> hoge = 20 20 iex> hoge 20 iex> 20 = 20 20 iex> 30 = 20 ** (MatchError) no match of right hand side value: 20 iex> 20 = hoge 20 iex> 30 = hoge ** (MatchError) no match of right hand side value: 20
まとめ
こんな風にネタが思いついたら書き綴って、薄い本(技術同人誌)にして出したいなぁ。*8
*1:https://nextpublishing.jp/book/11841.html
*2:考えるな。感じろ。
*3:Read-Eval-Print Loop
*4:ErlangやElixirでは、『=』は代入ではなくパターンマッチングに利用するマッチ演算子。変数に対してマッチ演算子を使った場合、マッチ演算子で指定した値と同値の扱いになる。これを束縛という。
*5:厳密には、キャレットは「ピン演算子」と呼ぶ。ピン演算子が変数に付与している場合、新たに束縛は行わず、以前に束縛させた値とマッチしているかを判定する
*6:Erlangが変数に再束縛できないのに対して、Elixirは再束縛ができることをネタにしてみました。
*7:もっと良い言い方があれば教えてください。
*8:今回のネタは「いざない」か? という懸念はありマス。