Herramientas de usuario

Herramientas del sitio


introalg:taller3

¡Esta es una revisión vieja del documento!


Clase 3

Plan para hoy

Algunas soluciones de la clase anterior

Veamos algunas soluciones presentadas Wiki de Scripts Haskell.

Clase

Veamos el ejercicio 18

Defina la funci\'on paraTodo: (A→ Bool)→ [A]→ Bool, donde paraTodo.p.xs decide si todos los elementos de la lista xs cumplen con el predicado p.

Nuevamente esta función es el típico caso que se resuelve con un caso base y un caso inductivo

paraTodo :: (a->Bool) -> [a] -> Bool
paraTodo p [] = True
paraTodo p (x:xs) = p x && paraTodo p xs

Notemos que esta función toma como parámetro una función.

  • Funciones que toman funciones.
  • Funciones de alto orden.

Esto es muy poderoso porque permite escribir programas funcionales que toman programas funcionales y generan otros programas funcionales. Las funciones son ciudadanos de primera categoría no como en otros lenguajes de programación (imperativos).

Definimos rápidamente el predicado noMultiplo p n que indica cuando p no es múltiplo de n.

noMultiplo :: Int -> Int -> Bool
noMultiplo p n = p `mod` n >0

Notamos:

  • Volvimos infija la función mod.
  • Usamos una versión currificada.

Podríamos haber escrito

noMultiplo' :: (Int,Int) -> Bool
noMultiplo' (p,n) = p `mod` n >0

Sin embargo son diferentes pues noMultiplo permite la aplicación parcial

Main> :t noMultiplo
noMultiplo :: Int -> Int -> Bool
Main> :t noMultiplo 20
noMultiplo 21 :: Int -> Bool
Main> :t noMultiplo 21 2
noMultiplo 21 2 :: Bool

Con estos elementos y la función desdeHasta que ya figura en sus practico8.hs, podemos construir la función primo (ejercicio)

Ejercicios

  • (P8,E19) Usando paraTodo, desdeHasta y noMultiplo, defina la función primo. Pruebe con los siguientes primos: 7, 73, 739, 7393, 73939, 739391, 7393913, 73939133, donde sus sucesores no lo son. * (P8,E21) Defina la función iguales :: Eq a ⇒ [a] → [a] → Bool que retorna true si las listas son iguales. * (P8,E24) Definla la función mapear :: (a→b) → [a] → [b], que dada una función f y una lista xs aplica f a cada elemento de la lista. Escriba duplicar' y multiplicar' utilizando mapear.
introalg/taller3.1147737901.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)