Thật dễ dàng để biểu diễn một cây hoặc danh sách trong haskell bằng cách sử dụng các kiểu dữ liệu đại số. Nhưng làm thế nào bạn sẽ đi về đại diện cho biểu đồ? Có vẻ như bạn cần phải có con trỏ. Tôi đoán bạn có thể có một cái gì đó như
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
Và đó sẽ là khả thi. Tuy nhiên, nó cảm thấy một chút tách rời; Các liên kết giữa các nút khác nhau trong cấu trúc không thực sự "cảm thấy" vững chắc như các liên kết giữa các yếu tố trước và hiện tại trong danh sách, hoặc cha mẹ và con cái của một nút trong cây. Tôi có linh cảm rằng việc thực hiện các thao tác đại số trên biểu đồ như tôi đã xác định nó sẽ bị cản trở phần nào bởi mức độ gián tiếp được giới thiệu thông qua hệ thống thẻ.
Chủ yếu là cảm giác nghi ngờ và nhận thức về sự không phù hợp này khiến tôi phải đặt câu hỏi này. Có cách nào tốt hơn / thanh lịch hơn về mặt toán học trong việc xác định đồ thị trong Haskell không? Hay tôi đã vấp phải một cái gì đó vốn đã khó / cơ bản? Cấu trúc dữ liệu đệ quy là ngọt ngào, nhưng điều này dường như là một cái gì đó khác. Cấu trúc dữ liệu tự tham chiếu theo nghĩa khác với cách cây và danh sách tự tham chiếu. Giống như danh sách và cây tự tham chiếu ở cấp độ loại, nhưng biểu đồ là tự tham chiếu ở cấp giá trị.
Vậy chuyện gì đang thực sự xảy ra?
fgl
gói phát triển ra khỏi này.