Skip to content

Commit

Permalink
Finish explaining the relationship of pattern-matching and defining v…
Browse files Browse the repository at this point in the history
…alues
  • Loading branch information
igrep committed May 19, 2024
1 parent 8a21db7 commit 43fe6b0
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions assets/18.md
Original file line number Diff line number Diff line change
Expand Up @@ -979,13 +979,25 @@ isEmptyEntry otherEntry = False

2行目の`isEmptyEntry (Entry { category = "", price = 0 }) = True`という行に注目してください。先程`entry = Entry { category = "", price = 0 }`と書いて`entry`を作るのに使用した`Entry { category = "", price = 0 }`という式が、ここでも使用されているのがわかるでしょうか?そう、パターンマッチでマッチさせる式を指定するのは、値を定義するのに用いる式と、全く同じ構文なのです。

このことは、パターンに変数が含まれている場合も同じです。hoge
このことは、パターンに変数が含まれている場合も同じです。`Entry`型の`category``cat``price``pri`に割り当てるときのパターンマッチを例にします:

値を定義する際に変数を参照するのと、パターンマッチでレコードの中にある値を変数に代入するのは、逆の動き
```haskell
f (Entry { category = cat, price = pri }) = {- ...ここで cat と pri を使う式 ... -}
```

この`Entry { category = cat, price = pri }`をそのまま`Entry`型の値を定義する式として使う場合、次のように予め`cat``pri`という変数を定義しておく必要があります:

```haskell
ghci> cat = "Magazine"
ghci> pri = 520
ghci> entry = Entry { category = cat, price = pri }
```

そう、`Entry { category = cat, price = pri }`という式は、`cat``pri`という**変数を元に`Entry`型の値を組み立てる**式なのです。これは、`Entry { category = cat, price = pri }`というパターンマッチが、**`Entry`型の値を分解して**`category``cat``price``pri`という**変数に割り当てる**のと、ちょうど逆のことをしているのが分かるでしょうか?

hoge
このようにパターンマッチと値の定義は、全く同じ構文を利用して、**値の分解**と値を組み立てる(**値の構築**)、というそれぞれ逆のことを行うものとなっています。

これまで紹介したものや、これ以降に紹介するパターンマッチの構文でも全く同じことが言えます。ぜひ覚えておいてください。
以上の性質は、これまで紹介したものや、これ以降に紹介するパターンマッチの構文でも全く同じことが言えます。ぜひ覚えておいてください。

#### タプルに対する関数の引数でのパターンマッチ

Expand Down

0 comments on commit 43fe6b0

Please sign in to comment.