Está en la página 1de 16

Algunas Funciones Predefinidas

(&&) :: Bool -> Bool “Conjunción”


(||) :: Bool -> Bool “Disyución”
not :: Bool -> Bool “Negación”
otherwise :: Bool “d e vu e l v e el va lo r T ru e”
negate :: Int -> Int “in vier te e l sign o ”
even :: Int -> Bool “p a r”
odd :: Int -> Bool “Imp a r”
signum :: Int -> Int “d e vu e lve 1 ,-1 o 0 ”
Algunas Funciones Predefinidas
truncate ::Float ->Int “eliimin a p a r t e d e cimal ”
round ::Float ->Int “re d o n d e a a l iIn t +p ro ximo ”
floor ::Float ->Int “e l e n te ro in fer io r”
ceiling ::Float ->Int “e l e n te ro su p e r io r”
fromInt :: Int -> Float
fromInteger :: Integer -> Float
ord :: Char ->Int “ d e vu e lve có d ig o A S C II”
chr ::Int -> Char “fu n ció n in ve r sa d e o rd ”

2010-II
Algunas Funciones Predefinidas
toUpper :: Char -> Char “d a la ma yú scu la ”
toLower :: Char -> Char “d a la minú scu la ”
isUpper :: Chard -> Bool
isLower :: Chard -> Bool
isDigit :: Chard -> Bool
isAlpha :: Chard -> Bool

2010-II
Algunos Operadores Predefinidos
> “ma yo r q u e ”
< “me n o r q u e ”
== “ig u a la ”
>= “ma yo r igu al”
<= “menor i g ua l“
/= d iferente d e ”
“para e l tipo Ch a r e l o rd e n vie n e d a d o
p o r e l código ASCII del caracter”
Operadores Frente a Funciones
La principal diferencia entre un operador y
una función fe dos argumentos es que los
primeros se usan de modo infijo (entre sus
argumentos) mientras que las funciones se
usan de modo prefijo (preceden a sus
argumentos)
< operador
(<) función
Definición de Operadores
Cuando se define un operador podemos
indicar su prioridad y su asociatividad.
Infix “d e fin e o p e r ad o r n o a sociat ivo ”
Infixl “o p e r a d o r a so ciativo a la izq u ie rd a ”
infixr “o p e r a d o r a so cia t ivo a la d e re ch a ”
Ejemplo
Infix 4 ~=
(~=) :: Float -> Float -> Bool
x ~= y = abs( x – y ) < 0.001
Asociatividad Prioridad de los
Operadores
La prioridad no aclara qué ocurre cuando un
mismo operador aparece varias veces en una
expresión. La asociatividad aclara el
significado de la expresión.

8-5-2 por la izquierda (8-5)-2


8-5-2 por la derecha 8-(5-2)
Comparación de Patrones
Ejemplo 1
fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n-1)
Ejemplo 2
(&&) :: Bool -> Bool -> Bool
(&&) False x = False
(&&) True x = x
Comparación de Patrones
Ejemplo 3 ( patrones pueden anidarse)
sumaPares :: [ (Int , Int ) ] -> Int
sumaPares [ ] = 0
sumaPares ( ( x,y ): xs) = x+y+sumaPares xs
Ejemplo 4
factorial :: Int -> Int
factorial 0 = 1
factorial (n+1) = (n+1) * factorial n
Pregunta
fact (-4) = ?

factorial (-4) = ?

Por qué ?
Patrones nombrados o Seudónimos
Ejemplo
factorial2 :: Int -> Int
factorial2 0 = 1
factorial2 m@(n+1) = m * factorial n

Mejora ligeramente la eficiencia de la función


y disminuye la probabilidad de que el
programador cometa errores tipográficos .
El patrón subrayado
Ejemplo
esVacia :: [ a ] -> Bool
esVacia [ ] = True
esVacia ( _ : _ ) = False

El patrón subrayado unifica con cualquier


argumento pero no establece ligadura
alguna.
O b serv ar “ ev alu ació n p ereso za”
Ejemplo1
infinita :: [ Integer ]
infinita = 1 : infinita

Ejemplo2
esVacia infinita = False
= > e sV a cia ( 1 : infinita ) “ d e f Infinita”
=>ddede e se g u n d a e cu a ció n d e e sV a cia ”
F a lse“
Expresiones Condicionales
Ejemplo
maximo2 :: Int ->Int->Int
maximo2 x y =if x>=y then x else y

Observar
If 5>2 then 8 else ( 8/ 0)
“ e va lu a ció n p e re so za ”
Definiciones Locales
raices ::Float ->Float -> Float -> (Float ,Float)
raices a b c
| disc >=0 = (-b+sqrt disc)/deno , (-b-sqrt
disc)/deno)
| o th e rw is e = e rro r “ra íce s co m p le ja s”
where
disc = ((b^2)-(4*a*c))
deno = 2*a
Tipo Rational
Es necesario importar la biblioteca Ratio
Ejemplo
import Ratio
sumaenQ :: Rational ->Rational ->Rational
sumaenQ p q = p+q

También podría gustarte