Clausura reflexiva
Usando el tipo de las relaciones binarias, definir la función
1 |
clausuraReflexiva :: Eq a => Rel a -> Rel a |
tal que clausuraReflexiva r
es la clausura reflexiva de r
; es decir, la menor relación reflexiva que contiene a r. Por ejemplo,
1 2 |
λ> clausuraReflexiva (R ([1,3],[(1,1),(3,1)])) R ([1,3],[(1,1),(3,1),(3,3)]) |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 |
import Relaciones_binarias (Rel(R)) import Data.List (union) import Test.QuickCheck (quickCheck) clausuraReflexiva :: Eq a => Rel a -> Rel a clausuraReflexiva (R (u,g)) = R (u, g `union` [(x,x) | x <- u]) |
1 2 3 4 5 6 7 8 9 |
from typing import TypeVar from src.Relaciones_binarias import Rel A = TypeVar('A') def clausuraReflexiva(r: Rel[A]) -> Rel[A]: (u, g) = r return (u, list(set(g) | {(x, x) for x in u})) |