Tôi đã đặt này như một câu trả lời chứ không phải bình luận để nó có một số định dạng:
data Rose a = Branch a [Rose a]
deriving (Show)
sample1 :: Rose Int
sample1 = Branch 1 [Branch 2 [], Branch 3 [Branch 5 []], Branch 4 []]
Đây là giống như các mô-đun Data.Tree thư viện, mặc dù Data.Tree sử dụng lĩnh vực nhãn và một nhập từ đồng nghĩa.
Tôi đã nhìn thấy cả cây này và định nghĩa đầu tiên của bạn được gọi là "Cây hoa hồng" mặc dù chúng có hình dạng hơi khác nhau nên thuật ngữ dường như không hoàn toàn chính xác. Cách giải thích của tôi là danh sách "[Rose a]" được nhúng vào trong một hàm tạo đệ quy đơn nhất định nghĩa nó là một cây Rose.
Nguồn
2010-12-13 21:41:54
Được rồi, nhưng trong cả hai trường hợp lá và nhánh được xác định bởi ngôn ngữ, và tôi xác định loại cây của riêng tôi. phải không? –
@Stephane: Không. Trong cả hai trường hợp, không phải kiểu 'Tree' cũng như các hàm tạo' Leaf' và 'Branch' tồn tại trước đó, và bạn định nghĩa cả ba trường hợp với định nghĩa' data' của bạn. – sepp2k
Xin chào sepp2k - "cây chung" được định nghĩa trong câu hỏi thường được gọi là cây hồng. Đôi khi chúng được thực hiện với một hàm tạo Leaf riêng biệt như trên - đôi khi theo Data.Tree, hàm tạo Branch mang dữ liệu thay thế. –