Ensayo sobre Haskell
-
Upload
carlos-cruz -
Category
Documents
-
view
23 -
download
2
description
Transcript of Ensayo sobre Haskell
-
Tarea 5 Ensayo
sobre Haskell
Elaborado por:
Carlos Hctor Cruz Lpez
-
1
Haskell
Para empezar a hablar sobre haskell, primero es importante tener en claro que es
la programacin funcional. La programacin funcional es un paradigma de
programacin que se basa en el uso de funciones matemticas para resolver
problemas. Algunos lenguajes de programacin funcional son Lisp, scheme, AP y
Haskell. Este ultim mencionado ser del que hablaremos, describiendo sus
principales caractersticas y como se programa.
Las principales caractersticas de la programacin funcional son:
Definicin y evaluacin de funciones y variables.
Los bucles se modelan a travs de la recursividad ya que no hay manera de
incrementar o disminuir el valor de una variable.
Las funciones son consideradas un tipo de dato primitivo.
Una funcin puede tomar como argumento otra funcin.
Devolver un procedimiento como resultado de una llamada de otro
procedimiento.
Tener estructuras de datos que contengan procedimientos como elementos.
Una variable puede tener como valor un procedimiento.
Ahora que ya tenemos en claro lo que podemos lograr con el paradigma de la
programacin funcional empezaremos a hablar sobre Haskell.
Qu es Haskell?
Haskell es un lenguaje funcional puro y, no estricto y fuertemente tipificado. Al
decir puro nos referimos a que tiene la propiedad de transparencia referencial, no
estricto se refiere a que usar un orden no aplicativo y la tipificacin fuerte habla
sobre que los elementos del lenguaje utilizables estn clasificados en distintas
categoras o tipos.
Caractersticas de Haskell
Sistema potente de tipos.
-
2
Listas por compresin.
Programas concisos.
Funciones recursivas.
Funcin de orden superior.
GHC (Glasgow Haskell Compiler)
Para empezar a trabajar con Haskell, lo primero es instalar su plataforma. GHC es
un compilador de Haskell de libre distribucin y existen varias versiones gratuitas
para distintos sistemas operativos que puenden ser descargados desde su pagina
oficial: https://www.haskell.org/ghc/
Una vez instalado el compilador de Haskell ejecutamos WinGHCi y ya tenemos a
nuestra disposicin la consola interactiva de Haskell que nos muestra lo siguiente:
La consola nos indica que el sistema est listo para leer una expresin, evaluarla y
escribir su resultado.
Operaciones aritmticas
Sintaxis Descripcin Ejemplo
x + y Es la suma de x e y. Prelude> 10 + 9 19
x y Es la resta de x e y. Prelude> 10 - 2 8
x / y Es el cociente de x entre y.
Prelude> 10 / 2 5.0
x * y Es la multiplicacin de x Prelude> 18 * 20 360
-
3
por y.
x ^ y Es x elevado a y. Prelude> 2 ^ 8 256
div x y Es la divisin entera de x entre y.
Prelude> div 10 2 5
mod x y Es el resto de x entre y Prelude> mod 230 25 5
Operaciones lgicas y comparaciones
Sintaxis Descripcin Ejemplos
x && y Es la conjuncin de x e y. Prelude> True && False False
x || y Es la disyuncin de x e y. Prelude> False || True True
not x Es la negacin lgica del booleano x
Prelude> not False True
x == y Se verifica si x es igual a y.
Prelude> 10 == 10 True Prelude> 10 == 8 False
x /= y Se verifica si x es distinto de y.
Prelude> 8 /= 8 False
x < y Se verifica si x es menor a y.
Prelude> 8 < 10 True
x 15 y Se verifica si x es mayor que y.
Prelude> 20 > 18 True
x >= y Se verifica si x es mayor o igual que y.
Prelude> 28 >= 30 False
Funciones predefinidas
Nombre Descripcin Sintaxis Ejemplo
succ Devuelve el sucesor de un nmero o carcter.
succ
Prelude> succ 90 91 Prelude> succ 'a' 'b'
pred Devuelve el predecesor de un nmero o carcter.
pred
Prelude> pred 8 7 Prelude> pred (-8) -9 Prelude>
min Devuelve el mnimo de dos valores.
min
Prelude> min 10 18 10
-
4
max Devuelve el mximo de dos valores
max
Prelude> max 87 95 95
pi Devuelve el valor de pi ()
Pi Prelude> pi 3.141592653589793
sqrt Calcula la raz cuadrada de un valor.
sqrt Prelude> sqrt 81 9.0
cos Calcula el coseno de un valor en radianes
cos Prelude> cos 90 -0.4480736161291701
cosh Calcula el coseno hiperblico de un valor en radianes
cosh Prelude> cosh 3 10.067661995777765
asin Calcula el arco seno de un valor en radianes
asin Prelude> asin 0.5 0.5235987755982989
tan Calcula la tangente de un valor en radianes
tan Prelude> tan 9 -0.4523156594418098
gcd Calcula el mximo comn divisor de dos valores.
gcd
Prelude> gcd 8 6 2
lcm Calcula el minimo comn mltiplo de dos valores.
lcm
Prelude> lcm 8 6 24
exp Calcula el exponencial de un valor.
exp Prelude> exp 1 2.718281828459045
log Calcula el logaritmo neperiano de un valor.
log Prelude> log 10 2.302585092994046
round Redondea un valor numrico.
round Prelude> round 8.9 9
even Se verifica si un valor es par o no.
even Prelude> even 8 True
Funciones con listas
Nombre Descripcin Sintaxis Ejemplo
head Retorna el primer elemento de la lista.
head [lista] Prelude> head [12,11,19,22,8,27] R = 12
last Retorna el ltimo elemento de la lista.
last [lista] Prelude> last [1,5,100,22,8,80] R = 80
tail Retorna todos los elementos menos el primero.
tail [lista] Prelude> tail [112,1,1985,22,8,20] R = [1,1985,22,8,20]
init Retorna todos los elementos menos el ltimo.
init [lista] Prelude> init [191,1985,12,9,27] R = [191,1985,12,9]
length Retorna el nmero de length [lista] Prelude> length
-
5
elementos de la lista. [11,85,22,8,27] R = 5
take Retorna los primeros n elementos de la lista.
take [lista] Prelude> take 2 [91,81,985,22,8] R = [91,81]
drop Retorna los elementos de la lista, excepto los n primeros.
drop [lista] Prelude> drop 2 [99,100,195,22,8] R = [195,22,8]
takeWhile Ms potente que take pues puede retornar ciertos tipos de datos indicados.
takeWhile (cond.) [cond]
Prelude> takeWhile ( dropWhile ( reverse [91,1,195] R = [195,1,91]
concat Toma ciertos elementos o listas y las retorna en una sola lista.
concat [e1,e2,e3]
Prelude> concat ["hola","a","todos"] R = "holaatodos"
words Retorna una lista de strings de acuerdo a los espacios en blanco de un string.
words e1 e2 e3 Prelude> words "Hola a todos" R = ["Hola","a","todos"]
unwords Retorna un string de una lista de strings.
unwords [e1,e2,e3]
Prelude> unwords ["hola","a","todos"] "hola a todos"
elem Retorna si un elemento esta o no en la lista.
elem e1 [e1,e2,e3]
Prelude> elem "t" ["a","f","r","t"] R = True
notelem Lo opuesto a elem. Notelem e1 [e1,e2,e3]
Prelude> notElem "t" ["a","f","t"] False
Funciones definidas por el usuario
Ejemplos:
Ejemplo 1. Definir la funcin ultimaCifra tal que (ultimaCifra x) es la ltima cifra del
nmero x.
Cdigo:
ultimaCifra x = rem x 10
Resultado:
-
6
Ejemplo 2. Definir la funcin maxTres tal que (maxTres x y z) es el mximo de x, y
y z.
Cdigo:
maxTres x y z = max x (max y z)
Resultado:
Ejemplo 3. Definir la funcin area tal que (area a b c) es el rea de un tringulo de
lados a, b y c.
Cdigo:
area a b c = sqrt (s*(s-a)*(s-b)*(s-c))
where s = (a+b+c)/2
Resultado: