Haskell — Unfoldr

El mòdul Data.List de Haskell ofereix una funció unfoldr :: (b -> Maybe (a, b)) -> b -> [a] que és un dual de foldr. Aquesta és la seva documentació:

While foldr reduces a list to a summary value, unfoldr builds a list from a seed value. The function takes the element and returns Nothing if it is done producing the list or returns Just (m, n), in which case, m is prepended to the list and n is used as the next element in a recursive call.

  1. Definiu recursivament una funció myUnfoldr :: (b -> Maybe (a, b)) -> b -> [a] que funcioni com unfoldr.

    Si no us en sortiu, podeu fer la resta dels apartats fent myUnfoldr = unfoldr i incloent un import Data.List (unfoldr) al principi del programa.

  2. Definiu, utilitzant myUnfoldr, una funció myReplicate :: a -> Int -> [a] de manera que myReplicate x n retorni una llista amb n cops el valor x.

  3. Definiu, utilitzant myUnfoldr, una funció myIterate :: (a -> a) -> a -> [a] que funcioni com iterate.

  4. Definiu, utilitzant myUnfoldr, una funció myMap :: (a -> b) -> [a] -> [b] que funcioni com map

  5. Considereu la definició següent del tipus Bst per arbres binaris de cerca, juntament amb una funció add que hi afegeix valors:

    data Bst a = Empty | Node a (Bst a) (Bst a) deriving Show
    
    add :: Ord a => a -> (Bst a) -> (Bst a)
    
    add x Empty = Node x Empty Empty 
    add x (Node y l r)
        | x < y          = Node y (add x l) r
        | x > y          = Node y l (add x r)
        | otherwise = Node y l r

    Feu que els arbres binaris de cerca siguin instància de Show, mostrant-se segons els exemples.

  6. Definiu una funció adder :: Ord a => (Bst a, [a]) -> Maybe (Bst a, (Bst a, [a])) de manera que myUnfoldr adder (t, xs) retorni una llista que mostri, pas a pas, la construcció d’un arbre binari de cerca inserint seqüencialment els valors de xs en t. Vegeu l’exemple.

El Jutge dóna puntuacions parcials, 15 punts per apartat i 10 per l’exemple públic.

Observació

A l’hora de corregir es tindrà en compte la correcció, senzillesa, elegància i eficiència de la solució proposada.

Informació del problema

Autoria: Jordi Petit

Generació: 2026-02-03T17:10:29.989Z

© Jutge.org, 2006–2026.
https://jutge.org