TAD de los conjuntos - Reconocimiento de subconjunto propio
Utilizando el tipo abstracto de datos de los conjuntos definir la función
subconjuntoPropio :: Ord a => Conj a -> Conj a -> Bool
tal subconjuntoPropio c1 c2
se verifica si c1
es un subconjunto propio de c2
. Por ejemplo,
λ> ej1 = inserta 5 (inserta 2 vacio) λ> ej2 = inserta 3 (inserta 2 (inserta 5 vacio)) λ> ej3 = inserta 3 (inserta 4 (inserta 5 vacio)) λ> ej4 = inserta 2 (inserta 5 vacio) λ> subconjuntoPropio ej1 ej2 True λ> subconjuntoPropio ej1 ej3 False λ> subconjuntoPropio ej1 ej4 False
Soluciones
Se usará función subconjunto
definida en el ejercicio Reconocimiento de subconjuntos.
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
import TAD.Conjunto (Conj, vacio, inserta) import TAD_subconjunto (subconjunto) subconjuntoPropio :: Ord a => Conj a -> Conj a -> Bool subconjuntoPropio c1 c2 = subconjunto c1 c2 && c1 /= c2
Soluciones en Python
from __future__ import annotations from abc import abstractmethod from typing import Protocol, TypeVar from src.TAD.conjunto import (Conj, conjuntoAleatorio, elimina, esVacio, inserta, menor, pertenece, vacio) from src.TAD_subconjunto import subconjunto class Comparable(Protocol): @abstractmethod def __lt__(self: A, otro: A) -> bool: pass A = TypeVar('A', bound=Comparable) def subconjuntoPropio(c1: Conj[A], c2: Conj[A]) -> bool: return subconjunto(c1, c2) and c1 != c2