パターンマッチ
case式
code:elm
case maybeStr of
Just str ->
str
Nothing ->
"none"
code:elm
case list of
x :: xs ->
x
[] ->
default
関数定義での(引数に対する)パターンマッチはできることが限られるため、複数パターン存在する型に対するパターンマッチではcaseがメイン
この点は以下のIssueで触れられている
ただひとつのコンストラクタしか持たない型であれば、関数定義でも不足なくパターンマッチできる
code:elm
type Id =
Id String
func : Id -> String
func (Id str) =
str
関数定義の引数(let in節での変数束縛でも同様)
code:elm
type alias A =
{ f1 : String
, f2 : ( Int, Int )
}
func1 : A -> String
func1 { f1 } =
f1
func2 : ( String, Int ) -> Int
func2 ( left, right ) =
right
組み合わせても良い
code:elm
case listOfTuples of
( left, right ) :: xs ->
left
[] ->
default
asで、パターンマッチしている対象全体を同時に別の変数にも束縛できる
code:elm
func ({ f1 } as a) =
()で囲む必要がある
他言語の方へ
関数本体を複数書くこともできないし、ガード節みたいなのもないです
書いたけどなんか他にもありそう。/ymtszw/ymtszw.icon
初手が「関数定義での(引数に対する)パターンマッチはできることが限られる」だと「関数定義でのパターンマッチって何?」ってなった