Tôi có câu hỏi về nhà điều hành mặc định "=" (bằng) trong F #. Nó cho phép so sánh các loại công đoàn do người dùng định nghĩa. Câu hỏi đặt ra là: sự phức tạp của nó là gì? Ví dụ, chúng ta hãy xem xét loại sau:F # bằng độ phức tạp của toán tử
type Tree<'a> =
| Nil
| Leaf of 'a
| Node of Tree<'a> * Tree<'a>
và cây sau:
let a : Tree<int> = Node (Node (Node (Leaf 1, Leaf 2), Node (Leaf 3, Node (Leaf 4, Leaf 5))), Node (Leaf 6, Nil))
let b : Tree<int> = Node (Node (Node (Leaf 1, Leaf 2), Node (Leaf 3, Node (Leaf 4, Leaf 5))), Node (Leaf 6, Nil))
let c : Tree<int> = Node (Node (Node (Leaf 1, Leaf 2), Nil), Node (Node (Leaf 3, Node (Leaf 4, Leaf 5)), Leaf 6))
Rõ ràng là mã này:
printfn "a = b: %b" (a = b)
printfn "a = c: %b" (a = c)
printfn "a = a: %b" (a = a)
sản xuất sản lượng này:
a = b: true
a = c: false
a = a: true
Tôi mong rằng "a = b "và" a = c "tổng hợp mất thời gian tuyến tính. Nhưng còn "a = a" thì sao? Nếu nó là hằng số gì về cấu trúc phức tạp hơn, như thế một:
let d : Tree<int> = Node (a, c)
let e : Tree<int> = Node (a, c)
nó sẽ đi qua toàn bộ d và e cấu trúc hoặc nó sẽ dừng lại ở "a = một" và "c = c "?
Người bỏ phiếu, quan tâm để nhận xét? – svick
Tôi không phải là downvoter, nhưng "thực hiện thông thường của' Equals' "bạn mô tả không áp dụng cho F # unions. – Daniel
Tại sao không? Nó cư xử chính xác như thế. – svick