Trong "Lập trình F #" Tôi đã xem qua một mô hình khớp như thế này (tôi đơn giản hóa một chút):Hiểu mô hình kết hợp với nhà điều hành nhược điểm
let rec len list =
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;
Thực tế, tôi hiểu rằng trận đấu cuối cùng nhận người đứng đầu và đuôi của danh sách. Về mặt khái niệm, tôi không hiểu tại sao nó hoạt động. Theo như tôi hiểu, :: là toán tử cons, nối thêm một giá trị ở vị trí đầu của một danh sách, nhưng nó không giống như tôi đang được sử dụng như một toán tử ở đây. Tôi có nên hiểu điều này dưới dạng "cú pháp đặc biệt" cho các danh sách, trong đó :: được hiểu là toán tử hay "mẫu đối sánh" tùy thuộc vào ngữ cảnh? Hoặc ý tưởng tương tự có thể được mở rộng cho các loại khác ngoài danh sách, với các toán tử khác không?
Cảm ơn bạn, quan điểm của bạn về :: là một cấu trúc đặc biệt là chính xác những gì tôi đã không rõ ràng về. Tôi đã thử sử dụng các toán tử khác trong mẫu phù hợp với cách "giống nhau", nhưng nó không có ý nghĩa gì nhiều và tôi không biết đâu, đó là điều khiến tôi băn khoăn về khuyết điểm. – Mathias
Lưu ý rằng điều tương tự cũng đúng đối với Tuples - bạn có thể sử dụng mẫu (,) để xây dựng và kết hợp/giải nén tuples, và đối với các loại khác (Some()/None) v.v. – Benjol
Đây là danh sách [tất cả được hỗ trợ kiểu mẫu] (https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/pattern-matching) với các ví dụ. – JanDotNet