ensayo sobre haskell

7
Tarea 5 Ensayo sobre Haskell Elaborado por: Carlos Héctor Cruz López

Upload: carlos-cruz

Post on 09-Nov-2015

23 views

Category:

Documents


2 download

DESCRIPTION

En este documento se habla sobre el lenguaje de programación Haskell empezando por describir ¿qué es?, su historia, características, ventajas y desventajas.

TRANSCRIPT

  • 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: