Thật dễ dàng, đủ để đại diện cho một cây hoặc danh sách trong haskell sử dụng các loại dữ liệu đại số. Nhưng làm thế nào bạn sẽ đi về typographically đại diện cho một đồ thị? 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ưBạn thể hiện một biểu đồ trong Haskell như thế nào?
type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours
Và điều đó có thể thực hiện được. 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 phần tử trước đó và tiếp theo trong danh sách, hoặc cha mẹ và con của một nút trong cây. Tôi có một linh cảm mà làm các thao tác đại số trên đồ thị như tôi đã xác định nó sẽ có phần bị cản trở bởi mức độ không giới thiệu được giới thiệu thông qua hệ thống thẻ.
Điều này chủ yếu là cảm giác nghi ngờ và nhận thức về sự thiếu chính xác khiến tôi đặt câu hỏi này. Có cách nào tốt hơn/nhiều hơn về mặt toán học để xác định đồ thị trong Haskell? Hay tôi đã vấp phải một cái gì đó vốn có khó khăn/cơ bản? Cấu trúc dữ liệu đệ quy là ngọt ngào, nhưng điều này có vẻ là một cái gì đó khác. Một cấu trúc dữ liệu tự tham chiếu theo nghĩa khác nhau về cách cây và danh sách tự tham chiếu. Nó giống như danh sách và cây là tự tham chiếu ở cấp loại, nhưng đồ thị là tự tham chiếu ở cấp độ giá trị.
Vậy điều gì đang thực sự xảy ra?
Bạn có thể quan tâm đến giấy Martin Erwig về các thuật toán đồ thị chức năng: http://web.engr.oregonstate.edu/~erwig/papers/abstracts.html#JFP01. Gói 'fgl' được phát triển từ điều này. –