Trong quá khứ, tôi đã sử dụng ocamlgraph. Đây không phải là một lib tầm thường để sử dụng, nhưng nếu bạn cần phải chèn các nút và thay đổi đường dẫn, đó có thể là lừa, tôi đã không bao giờ được sử dụng trong một bối cảnh cây ... mặc dù ...
Và trích xuất từ tài liệu ngôn ngữ:
Cách sử dụng phổ biến nhất của các loại biến thể là để mô tả dữ liệu đệ quy cấu trúc. Hãy xem xét ví dụ loại cây nhị phân:
#type 'a btree = Empty | Node of 'a * 'a btree * 'a btree;;
type 'a btree = Empty | Node of 'a * 'a btree * 'a btree
Định nghĩa này lần đọc như sau: một cây nhị phân chứa giá trị của loại 'một (một loại tùy ý) là một trong hai trống rỗng, hoặc là một nút có chứa một giá trị loại 'a và hai subtrees cũng chứa các giá trị thuộc loại' a, có nghĩa là, hai 'một btree.
Thao tác trên cây nhị phân là được biểu diễn tự nhiên dưới dạng đệ quy các chức năng theo cùng cấu trúc làm định nghĩa loại chính nó. Đối với dụ, đây là chức năng thực hiện tra cứu và chèn trong cây nhị phân ra lệnh (yếu tố tăng từ trái sang phải):
#let rec member x btree =
match btree with
Empty -> false
| Node(y, left, right) ->
if x = y then true else
if x < y then member x left else member x right;;
val member : 'a -> 'a btree -> bool = <fun>
#let rec insert x btree =
match btree with
Empty -> Node(x, Empty, Empty)
| Node(y, left, right) ->
if x <= y then Node(y, insert x left, right)
else Node(y, left, insert x right);;
val insert : 'a -> 'a btree -> 'a btree = <fun>
Hope this helps
vâng, nhưng tôi đang sử dụng những cây này để thực hiện cú pháp câu, vì vậy tôi không thể chỉ ném các giá trị trong đó. họ cần phải duy trì trật tự, và tôi đã hy vọng để thiết lập thứ tự này chỉ bằng cách tạo ra cây đúng cách, mặc dù tôi đoán tôi có thể sử dụng một loại bao bọc với cả một số và từ chính nó ... –
Bạn * có thể * thiết lập thứ tự tạo cây đúng cách. Trên thực tế, mô-đun Đặt duy trì các yếu tố của cây theo thứ tự (yếu tố thấp nhất ở hậu duệ trái nhất), vì vậy tôi vẫn nghĩ đó là nguồn cảm hứng tốt. –