El tipo de las listas
El tipo de las listas, con elementos de tipo a, se puede definir por
1 |
data Lista a = Nil | Cons a (Lista a) |
Por ejemplo, la lista [4,2,5]
se representa por Cons 4 (Cons 2 (Cons 5 Nil))
.
Definir la función
1 |
longitud :: Lista a -> Int |
tal que longitud xs
es la longitud de la lista xs
. Por ejemplo,
1 |
longitud (Cons 4 (Cons 2 (Cons 5 Nil))) == 3 |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 |
data Lista a = Nil | Cons a (Lista a) longitud :: Lista a -> Int longitud Nil = 0 longitud (Cons _ xs) = 1 + longitud xs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from dataclasses import dataclass from typing import Generic, TypeVar A = TypeVar("A") @dataclass class Lista(Generic[A]): pass @dataclass class Nil(Lista[A]): pass @dataclass class Cons(Lista[A]): x: A xs: Lista[A] def longitud(xs: Lista[A]) -> int: match xs: case Nil(): return 0 case Cons(_, xs): return 1 + longitud(xs) assert False |