パターンマッチ
#プログラミング言語
n月刊ラムダノート Vol1No3 を読む
p15 リストのタプルに対する網羅性チェック
p16 非冗長性(到達しないパターン)のチェック
p16 ワイルドカードパターン(特に、_を複数回書く場合がある)
p18 valによる束縛もパターンマッチの一種
p19 マッチするかの前に、各値の型が一致してるかを検査する
p34 LLVMのunreachableを使うことで高速化できる場合がある
p36 ORパターンというものがある
p39 Rustでは match x {} ができる。この式の型はbottom型になる
p67 ピン演算子(^a)
p68 Asパターン(=>)
#ruby
case-in
#python
https://www.python.org/dev/peps/pep-0635/
match-case
value patternがある。Foo.Bar のようにドットが入っているものが埋め込み対象?
asパターンはas
#rust
https://doc.rust-lang.org/book/ch18-03-pattern-syntax.html
match =>
orパターン |
Some(10) と Some(y) の違い (後者のyは新しい変数。yを入れ込みたいときはguardで書く)
数値とcharのrangeが特別に書ける (cf. Rubyのcase-whenは===で判定)
guardは pat if cond =>
@バインディング
#scala
https://docs.scala-lang.org/ja/tour/pattern-matching.html
match-case
型のみでのマッチング:case p: Phone => みたいに書ける
#zig
https://ziglang.org/documentation/master/#switch
switch =>
#java
https://qiita.com/nowokay/items/6b8f109fe9dec4037d7e#パターンマッチングsecond-preview-in-jdk-15-preview-in-jdk-14
#shiika
match
code:sk
class A; def initialize(@a: 1, @b: 2); end; end
match x
when 0
when Integer
when A(a, b)
多重代入 (let =)
code:sk
let fst, snd, *rest, last = ary
let Pair(a, b) = find_pair
ちなみに上記ができるならば、以下も自動的にできることになる
let a = 1
配列のパターンマッチとか別に要らん気がしてきたな(Rubyと違いnつ組をArrayで代用しないので)