Sei sulla pagina 1di 7

Tarea 5 Ensayo

sobre Haskell
Elaborado por:
Carlos Hctor Cruz Lpez

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.


1

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
x+y

Descripcin
Es la suma de x e y.

xy

Es la resta de x e y.

x/y

Es el cociente de x entre
y.
Es la multiplicacin de x

x*y

Ejemplo
Prelude>
19
Prelude>
8
Prelude>
5.0
Prelude>
360

10 + 9
10 - 2
10 / 2
18 * 20
2

x^y
div x y
mod x y

por y.
Es x elevado a y.
Es la divisin entera de x
entre y.
Es el resto de x entre y

Prelude> 2 ^ 8
256
Prelude> div 10 2
5
Prelude> mod 230 25
5

Operaciones lgicas y comparaciones


Sintaxis
x && y

Descripcin
Es la conjuncin de x e y.

x || y

Es la disyuncin de x e y.

not x

Es la negacin lgica del


booleano x
Se verifica si x es igual a
y.

x == y

x /= y
x<y
x <= y
x>y
x >= y

Se verifica si x es distinto
de y.
Se verifica si x es menor
a y.
Se verifica si x es menor
o igual que y.
Se verifica si x es mayor
que y.
Se verifica si x es mayor
o igual que y.

Ejemplos
Prelude>
False
Prelude>
True
Prelude>
True
Prelude>
True
Prelude>
False
Prelude>
False
Prelude>
True
Prelude>
False
Prelude>
True
Prelude>
False

True && False


False || True
not False
10 == 10
10 == 8
8 /= 8
8 < 10
15 <= 8
20 > 18
28 >= 30

Funciones predefinidas
Nombre
succ

pred

min

Descripcin
Devuelve el sucesor de
un nmero o carcter.

Sintaxis
succ <numero o
carcter>

Devuelve el predecesor
de un nmero o
carcter.

pred <numero o
carcter>

Devuelve el mnimo de
dos valores.

min <numero>
<numero>

Ejemplo
Prelude>
91
Prelude>
'b'
Prelude>
7
Prelude>
-9
Prelude>
Prelude>
10

succ 90
succ 'a'
pred 8
pred (-8)

min 10 18

max
pi
sqrt
cos
cosh

asin
tan
gcd

lcm

exp
log
round
even

Devuelve el mximo de
dos valores
Devuelve el valor de pi
()
Calcula la raz cuadrada
de un valor.
Calcula el coseno de un
valor en radianes
Calcula el coseno
hiperblico de un valor
en radianes
Calcula el arco seno de
un valor en radianes
Calcula la tangente de
un valor en radianes
Calcula el mximo
comn divisor de dos
valores.
Calcula el minimo
comn mltiplo de dos
valores.
Calcula el exponencial
de un valor.
Calcula el logaritmo
neperiano de un valor.
Redondea un valor
numrico.
Se verifica si un valor es
par o no.

max <numero>
<numero>
Pi
sqrt <numero>
cos <numero>
cosh <numero>

asin <numero>

Prelude> max 87 95
95
Prelude> pi
3.141592653589793
Prelude> sqrt 81
9.0
Prelude> cos 90
-0.4480736161291701
Prelude> cosh 3
10.067661995777765

gcd <numero1>
<numero2>

Prelude> asin 0.5


0.5235987755982989
Prelude> tan 9
-0.4523156594418098
Prelude> gcd 8 6
2

lcm <numero1>
<numero2>

Prelude> lcm 8 6
24

exp <numero>

Prelude> exp 1
2.718281828459045
Prelude> log 10
2.302585092994046
Prelude> round 8.9
9
Prelude> even 8
True

tan <numero>

log <numero>
round <valor>
even <numero>

Funciones con listas


Nombre
head

Descripcin
Retorna el primer
elemento de la lista.

Sintaxis

Ejemplo

head [lista]

last

Retorna el ltimo
elemento de la lista.

last [lista]

tail

Retorna todos los


elementos menos el
primero.
Retorna todos los
elementos menos el
ltimo.
Retorna el nmero de

tail [lista]

Prelude> head
[12,11,19,22,8,27]
R = 12
Prelude> last
[1,5,100,22,8,80]
R = 80
Prelude> tail
[112,1,1985,22,8,20]
R = [1,1985,22,8,20]
Prelude> init
[191,1985,12,9,27]
R = [191,1985,12,9]
Prelude> length

init

length

init [lista]

length [lista]

elementos de la lista.
take

Retorna los primeros n


elementos de la lista.

drop

Retorna los elementos


de la lista, excepto los n
primeros.
Ms potente que take
pues puede retornar
ciertos tipos de datos
indicados.
Ms potente que drop
pues puede retornar
ciertos tipos de datos
indicados.
Invierte una lista

takeWhile

dropWhile

reverse
concat

words

unwords

Toma ciertos elementos


o listas y las retorna en
una sola lista.
Retorna una lista de
strings de acuerdo a los
espacios en blanco de
un string.
Retorna un string de
una lista de strings.

elem

Retorna si un elemento
esta o no en la lista.

notelem

Lo opuesto a elem.

[11,85,22,8,27]
R = 5
take <n> [lista] Prelude> take 2
[91,81,985,22,8]
R = [91,81]
drop <n> [lista] Prelude> drop 2
[99,100,195,22,8]
R = [195,22,8]
takeWhile
Prelude> takeWhile
(cond.) [cond]
(<=5) [1..10]
R = [1,2,3,4,5]
dropWhile (cond) Prelude> dropWhile
[cond]
(<=10) [1..15]
R = [11,12,13,14,15]
reverse [lista]

Prelude> reverse
[91,1,195]
R = [195,1,91]
concat
Prelude> concat
[e1,e2,e3]
["hola","a","todos"]
R = "holaatodos"
words e1 e2 e3 Prelude> words "Hola
a todos"
R =
["Hola","a","todos"]
unwords
Prelude> unwords
[e1,e2,e3] ["hola","a","todos"]
"hola a todos"
elem e1
Prelude> elem "t"
[e1,e2,e3] ["a","f","r","t"]
R = True
Notelem e1
Prelude> notElem "t"
[e1,e2,e3] ["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:

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:

Potrebbero piacerti anche