Tengo una pregunta sobre el operador predeterminado "=" (igual) en F #. Permite comparar tipos de unión definidos por el usuario. La pregunta es: ¿cuál es la complejidad de esto? Por ejemplo, consideremos siguiente tipo:F # es igual a la complejidad del operador
type Tree<'a> =
| Nil
| Leaf of 'a
| Node of Tree<'a> * Tree<'a>
y siguientes árboles:
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))
Es obvio que este código:
printfn "a = b: %b" (a = b)
printfn "a = c: %b" (a = c)
printfn "a = a: %b" (a = a)
produce esta salida:
a = b: true
a = c: false
a = a: true
Espero que el "a = b "y" a = c "comparsions toma el tiempo lineal. Pero ¿qué pasa con "a = a"? Si es constante qué pasa con estructuras más complejas, como aquella:
let d : Tree<int> = Node (a, c)
let e : Tree<int> = Node (a, c)
Va a pasar por todo d y estructura e o va a parar en "a = a" y "c = c "?
Downvoter, ¿te gustaría comentar? – svick
No soy el infractor, pero la "implementación habitual de 'Igual'" que describió no se aplica a las uniones F #. – Daniel
¿Por qué no? Se comporta exactamente así. – svick