В «Программировании F #» я наткнулся на сопоставление с образцом вроде этого (я немного упростил):
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
Практически я понимаю, что последнее совпадение распознает начало и конец списка. Концептуально я не понимаю, почему это работает. Насколько я понимаю, :: - это оператор cons, который добавляет значение в начало списка, но мне не кажется, что он используется здесь как оператор. Следует ли мне понимать это как «специальный синтаксис» для списков, где :: интерпретируется как оператор или «шаблон соответствия» в зависимости от контекста? Или можно распространить ту же идею на типы, отличные от списков, с другими операторами?