F#で要素数が2つ以上のリストをマッチさせる

前に書いたこの記事に関連して。
F#で要素数が1つのリストをマッチさせる

今度は要素数が2つ以上のリストにマッチさせる方法について。こちらも前回同様 Cons パターン :: を使って次のように書ける。

match some_list with
| _::_::_ -> printfn "two or more elements"
| _ -> printfn "zero or one element"

_::_::_ は「先頭の要素、2番目の要素、残りの要素を含むリスト」の3つに分解可能なリストにマッチする。最後のリストは空のリストでも構わない。つまり要素数が2つ以上のリストにマッチするということになる。

実際に何がマッチしているかを出力した例がこちら。

let some_list = [1; 2]

match some_list with
| a::b::c -> printfn "%A, %A, %A" a b c
| _ -> printfn "zero or one element"

実行結果

1, 2, []