Menu Close

Día: 22 agosto, 2022

Interior de una lista

Definir la función

   interior :: [a] -> [a]

tal que (interior xs) es la lista obtenida eliminando los extremos de la lista xs. Por ejemplo,

   interior [2,5,3,7,3]  ==  [5,3,7]
   interior [2..7]       ==  [3,4,5,6]

Soluciones

A continuación se muestran las soluciones en Haskell y las soluciones en Python.


Soluciones en Haskell

interior :: [a] -> [a]
interior xs = tail (init xs)

El código se encuentra en GitHub.


Soluciones en Python

from typing import TypeVar
from hypothesis import given, strategies as st
 
A = TypeVar('A')
 
# 1ª solución
def interior1(xs: list[A]) -> list[A]:
    return xs[1:][:-1]
 
# 2ª solución
def interior2(xs: list[A]) -> list[A]:
    return xs[1:-1]
 
# La propiedad de equivalencia es
@given(st.lists(st.integers()))
def test_triangular(xs):
    assert interior1(xs) == interior2(xs)
 
# La comprobación es
#    src> poetry run pytest -q interior_de_una_lista.py
#    1 passed in 0.21s

El código se encuentra en GitHub.

Comentarios

  • Los elementos iniciales de una lista xs se calcula
    • en Haskell, con init xs y
    • en Python, con xs[:-1].