Intercambio de componentes de un par
Definir la función
1 |
intercambia :: (a,b) -> (b,a) |
tal que (intercambia p)
es el punto obtenido intercambiando las coordenadas del punto p
. Por ejemplo,
1 2 |
intercambia (2,5) == (5,2) intercambia (5,2) == (2,5) |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 |
intercambia :: (a,b) -> (b,a) intercambia (x,y) = (y,x) |
El código se encuentra en GitHub.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from typing import TypeVar from hypothesis import given, strategies as st A = TypeVar('A') B = TypeVar('B') def intercambia(p: tuple[A, B]) -> tuple[B, A]: (x, y) = p return (y, x) # La propiedad de es @given(st.tuples(st.integers(), st.integers())) def test_equiv_intercambia(p): assert intercambia(intercambia(p)) == p # La comprobación es # src> poetry run pytest -q intercambio_de_componentes_de_un_par.py # 1 passed in 0.15s |
El código se encuentra en GitHub.
Comentarios
- En Haskell se pone el patrón en los argumentos y en Python hay que extraerlos mediante un asignación.