lunes, 25 de octubre de 2010

Lenguajes funcionales

Laboratorio

Haskell

Haskell es otro lenguaje funcional, entre sus características más notables están en manejo de tipos de datos, funciones recursivas, listas , tuplas, guardas y calce de patrones.
En 1990 se definió la primera versión de Haskell(Haskell 1.0), después en 1997 "Haskell 98" con el que se intentó hacer una versión del lenguaje mínima estable y portable. A inicios del 2006 se se empezó el proceso de Haskell' que es una nueva versión de Haskell 98.

Tipos de datos

  • Bool
    Este tipo de datos puede ser true o false.

  • Int
    Son los números enteros que pueden estar en el intervalo [-2^29, 2^29 - 1]

  • Integer
    Son iguales al tipo "int" solo varía en en que tiene precisión ilimitada y los int limitada.

  • Float
    Son los números reales.

  • Double
    También son números reales solo que con aproximaciones más precisas que float.

  • Char
    Son caracteres.

  • Tuplas
    Es una lista con un número ilimitado de objetos, sus elementos pueden ser de distintos tipos.

  • Listas
    Es una colección de elementos del mismo tipo.

    Para empezar a programar en Haskell necesitamos un interprete "Hugs" para poder correr los scripts, trabaja con archivos de extensión .hs.
    Primero que nada debemos instalar el interprete Hugs:

    • cecy@cecy-desktop:~$ sudo apt-get install hugs

      ya que se termina de instalar tecleamos en el terminal:

      cecy@cecy-desktop:~$ hugs

      y aparecerá algo como esto:


      ahora tenemos esto en el terminal "Hugs>" lo que significa que podemos empezar a programar en Haskell.

      Las instrucciones en Haskell van precedidas de : por ejemplo cuando queremos salir del interprete hugs se escribe :quit o simplemente :q.

      Los programas en Haskell tienen la extensión .hs, para llamar algún archivo .hs se escribe :loads nombredelarchivo.hs

      Dos grandes ventajas de Haskell:

      Poliformismo
      Esto significa que las funciones pueden ser definidas para trabajar con distintos tipos de datos.

      Listas infinitas
      Lo que en muchos lenguajes se llama arreglos, en Haskell se trabaja con listas que contienen elementos "infinitos".

      Ahora algunos ejercicios para empezar a practicar con Haskell:

      Voy a hacer el programa potencia con distintas definiciones:

      Con condicionales:

      pot1 :: Num a => a -> Int -> a
      pot1 b e = if e == 0 then 1
      else b * pot1 b (e-1)

      Ejecución:


      Mediante guardas, las guardas se utilizan para evaluar alguna condición hasta que alguna sea true y "otherwise" se utiliza cuando no se cumplo la condición anterior:

      pot2 :: Num a => a -> Int -> a
      pot2 b e
      | e == 0 = 1
      | otherwise = b * pot2 b (e-1)

      Ejecución:


      Mediante patrones:

      pot3 :: Num a => a -> Int -> a
      pot3 b 0 = 1
      pot3 b e = b * pot3 b (e-1)

      Ejecución:


      Restricción del dominio mediante guardas:

      pot4 :: Num a => a -> Int -> a
      pot4 b e
      | e == 0 =1
      | e >= 1 = b * pot4 b (e-1)

      Ejecución:

2 comentarios:

  1. Hola de nuevo.

    Sabes, de haber visto esta entrada hubiera hecho también uno en Haskell, pero pues no me sabía lo de los dos puntos que preceden a las funciones.

    En fin, más arriba vi que se manejan lo que son listas, las cuales yo conoci en lenguaje C con un manejo más explícito de punteros.

    Pero aquí ya me mencionas que es lo mismo que los llamados arreglos en otros lenguajes y que son de elementos ilimitados.

    Se me afigura a los arreglos de Perl, pero no se que píenses al respecto. ¿Habra desventajas con las listas en Haskell con el hecho de ser ilimitadas?

    En lo personal yo digo que eso ayuda mucho para combatir lo que es el error de desbordamiento que vemos en los arreglos de lenguaje C.

    Saludos.

    PD. Ya que manejaste Haskell, ¿no viste por ahi si se manejan estructuras como las listas conocidas en C?

    ResponderEliminar
  2. Pongan las referencias bibliográficas en sus entradas, porfis. Seguramente no inventaste todo esto tú solita, Cecy ;) Seis puntos para Cecilia (habrá más si agrega bibliografía) y un punto a Roberto de participación para la clase.

    ResponderEliminar