在“Programming F#”中,我遇到了这样的模式匹配(我简化了一点):
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
实际上,我知道最后一场比赛可以识别列表的头部和尾部。从概念上讲,我不明白它为什么起作用。据我了解, :: 是 cons 运算符,它在列表的头部位置附加一个值,但在我看来,它不像在这里被用作运算符。我是否应该将此理解为列表的“特殊语法”,其中 :: 被解释为运算符或取决于上下文的“匹配模式”?或者是否可以使用其他运算符将相同的想法扩展到列表以外的类型?