VOOZH about

URL: https://qiita.com/yoshihiro503/items/c83fb2a6e2a6318db108

⇱ Coqでもあのニンジャパターンマッチが使えるぜ #let - Qiita


👁 Image
8

Go to list of users who liked

5

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@yoshihiro503in👁 Image
株式会社proof ninja

Coqでもあのニンジャパターンマッチが使えるぜ

8
Posted at

Coqでペア(2つ組)を束縛するlet式のときにはOCamlと同様に束縛する側にパターンを書くことができる。

Ninja.v
let(x,y):=(1,2)in...

しかし、これが3つ組になるとエラーとなる。

Ninja.v
let(x,y,z):=(1,2,3)in...
Error: Destructing let on this type expects 2 variables.

これはCoqのNinjaパターンマッチが2つ組だけしか考慮していないというわけではない。

let(変数名1,...,変数名n):=式1in...

という式は実は一般的に単一コンストラクタを持つすべてのInductive型で使用できることができ、それは次の内容と等価になる。

match式1with|コンストラクタ(変数名1,...,変数名n)=>...end

これはタプル以外でも使えるという利点がある一方で、入れ子になるパターンでは使えないという不便な点もある。上での3つ組でのエラーはちょうどその場合ではまっているということである(Coqの(1,2,3)は内部では((1,2),3)と扱われる)。

これだと不便だという事で、入れ子になったパターンマッチに対応した構文が用意されている。3つ組でのNinja パターンマッチをしたい場合は次のように書けば良い。

Ninja.v
let'(x,y,z):=(1,2,3)in...

それでは、良いニンジャパターンマッチを!

参考: https://coq.inria.fr/distrib/current/refman/Reference-Manual004.html

8

Go to list of users who liked

5
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8

Go to list of users who liked

5