TAD de los conjuntos: Reconocimiento de subconjunto propio
Utilizando el tipo abstracto de datos de los conjuntos definir la función
1 |
subconjuntoPropio :: Ord a => Conj a -> Conj a -> Bool |
tal subconjuntoPropio c1 c2
se verifica si c1
es un subconjunto propio de c2
. Por ejemplo,
1 2 3 4 5 6 7 8 9 10 |
λ> 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
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 8 9 10 |
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 -- La función subconjunto está definida en el ejercicio -- "Reconocimiento de subconjuntos" que se encuentra en -- https://bit.ly/3wPBtU5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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 # La función subconjunto está definida en el ejercicio # "Reconocimiento de subconjuntos" que se encuentra en # https://bit.ly/3wPBtU5 |