「プログラミング F#」では、次のようなパターン マッチングに出くわしました (少し単純化しました)。
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
実際には、最後の一致がリストの先頭と末尾を認識することを理解しています。概念的には、なぜそれが機能するのかわかりません。私が理解している限り、 :: はリストの先頭に値を追加する cons 演算子ですが、ここで演算子として使用されているようには見えません。これをリストの「特別な構文」と理解する必要があります。 :: はコンテキストに応じて演算子または「一致パターン」として解釈されますか? それとも、他の演算子を使用して、同じ考えをリスト以外の型に拡張できますか?