Elixirで単純なパターンマッチにハマりました。

前々からElixirに興味があったので、プログラミングElixirを購入しました。

プログラミングElixir

プログラミングElixir


第2章のパターンマッチでまで読んだのだけれど、理解できないところが。
(この記事を書いていたら解決したけれど、せっかく書いたので残しておきます。)

分からなかったのは2章の「練習問題PatternMatching-1」で、 結果がどうなるのかというもの。

a = [ [1, 2, 3]]
[a] = [ [1, 2, 3]]
[ [a] ] = [ [1, 2, 3] ]


一つ目はすぐに分かったのだけれど、二つ目、三つ目が分からなかった。

一つ目は、aは[ [1, 2, 3]]に束縛される。
これは見たままなので簡単。

二つ目は、aは[1, 2, 3]に束縛される。
三つ目は、MatchErrorになる。

ぱっと見何これ?と思ったのだけれど、一段ずつリストを取り出して考えれば簡単に分かりました。
三つ目の場合でいうと、

[ [a] ] = [ [1, 2, 3] ]
↓
[a] = [1, 2, 3]
↓
a = 1, 2, 3

左辺は値(a)が一つだけれど、右辺は1, 2, 3の3つ。
左辺と右辺で値の個数が違うためエラー。
二つ目も同じように考えれば、[1, 2, 3]になるのは納得。

上記みたいに考えれば簡単だけれど、最初式だけ見たときは全然理解できなくて、何これ?と思ってしまいました。

理解できたので引き続き3章以降も読み進めていこう。