Feu un programa que llegeixi tots els enters de l’entrada estàndard i
escrigui el més gran i el més petit. En cas de no haver enters o algun
element que no és un enter hauria d’escriure Nothing.
Necesitareu la funció readMaybe per a la conversió a
enters:
import Text.Read (readMaybe)
readMaybe :: Read a => String -> Maybe a
i les funcions foldM i join per a que el
recurregut pari en trobar un resultat invàlid:
import Control.Monad (join,foldM)
==
join :: Monad m => m (m a) -> m a
join $ Just $ Just 2 = Just 2
==
foldM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b
foldM f a1 [x1, x2, ..., xm]
==
do
a2 <- f a1 x1
a3 <- f a2 x2
...
f am xm
Restriccions:
No podeu utilitzar la recursivitat per resoldre aquest exercici.
Només podeu utilitzar un foldM per recorrer la
llista d’enters.
Heu d’aprofitar les instàncies de functors, applicatius i mònades sempre que pugueu.
Nota: podeu probar si la vostra funció para
utilitzant undefined. Quelcom com
f [Just 3, Nothing, undefined] hauria de donar
Nothing. Si dona un error és que no està parant.
Autoria: Gerard Escudero
Generació: 2026-04-23T12:34:35.012Z
© Jutge.org, 2006–2026.
https://jutge.org