Trên một cấp độ triết học hơn --- không bao giờ có thể là một sự tương ứng chặt chẽ giữa khái niệm toán học của một tập hợp và thực hiện bộ Haskell. Tại sao không? Vâng, hệ thống kiểu, cho người mới bắt đầu. Một tập hợp toán học có thể có bất kỳ thứ gì trong đó: {x | x is a positive integer, i < 15}
là một tập hợp, nhưng như vậy là {1, tree, ham sandwich}
. Trong Haskell, Set a
sẽ cần giữ một số loại cụ thể. Đưa đôi và nổi vào cùng một bộ sẽ không đánh máy.
Như những người khác đã nói, nếu bạn cần phải làm một số điều giống như thiết lập và không nhớ loại hạn chế, Data.Set tồn tại. Nó không có trong Prelude vì danh sách thường thực tế hơn. Nhưng thực sự, từ một quan điểm thiết kế ngôn ngữ, nó không có ý nghĩa để nghĩ về các bộ toán học như một kiểu dữ liệu trong số rất nhiều. Bộ là cơ bản hơn thế. Bạn không có bộ, số và danh sách; bạn có bộ số và tập hợp danh sách. Sức mạnh của các loại đệ quy có khuynh hướng che khuất sự phân biệt đó, nhưng nó vẫn còn thực.
Có một vị trí trong Haskell, tuy nhiên, nơi chúng tôi xác định các bộ sưu tập tùy ý và sau đó xác định các hàm trên các bộ sưu tập đó. Các tương tự gần nhất của khái niệm toán học của bộ trong Haskell là hệ thống loại chính nó.
** Lưu ý của người kiểm duyệt ** Nhận xét trong câu hỏi này chủ yếu là tiếng ồn hoặc phản ứng với tiếng ồn và chúng đã bị xóa. Xin vui lòng giữ ý kiến xây dựng và về chủ đề. –
Tôi thấy câu trả lời/nhận xét đề xuất việc sử dụng danh sách thay thế. một danh sách không phải là một sự thay thế hiệu quả cho bộ. thời gian để tìm một phần tử trong một danh sách không theo thứ tự tăng lên với kích thước của danh sách, trong một tập hợp, được mong đợi là không đổi. – ribamar