Herramientas de usuario

Herramientas del sitio


introalg:taller08_1

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
introalg:taller08_1 [2008/04/08 13:39] lauraintroalg:taller08_1 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 44: Línea 44:
   Hugs.Base> :q   Hugs.Base> :q
   [Leaving Hugs]   [Leaving Hugs]
-  [nicolasw@azul Taller]$+  [laura@azul Taller]$
  
 Así volvemos al modo normal de la computadora. Así volvemos al modo normal de la computadora.
Línea 56: Línea 56:
  
   sgn :: Int → Int    sgn :: Int → Int 
-  -- dado un entero x, //sgn// retorna su signo, de la siguiente forma: retornará 1 si x es positivo, -1 si es negativo y 0 en cualquier otro caso.+  -- dado un entero x, //sgn// retorna su signo, de la siguiente forma:  
 +  -- retornará 1 si x es positivo, -1 si es negativo y 0 en cualquier otro caso. 
 + 
 +Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '':e cap8.hs''. También se puede crear el script mediante un editor de texto cualquiera (//emacs//, //bloc de notas//, //kate//, //vi//,...). 
 + 
 +  Hugs.Base> :e cap8.hs
  
-Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '':e cap8.hs''. También se puede crear el script mediante un editor de texto cualquiera (//emacs//, //bloc de notas//, //kate//, //vi//,...) 
 Una posible solución para el problema de la función signo es la siguiente: Una posible solución para el problema de la función signo es la siguiente:
  
Línea 69: Línea 73:
 Luego de guardar el programa, hay cargarlo para que el intérprete Hugs pueda empezar a usar la nueva función que hemos creado. Luego de guardar el programa, hay cargarlo para que el intérprete Hugs pueda empezar a usar la nueva función que hemos creado.
  
-  Hugs.Base> :e cap8.hs 
   Hugs.Base> :l cap8.hs   Hugs.Base> :l cap8.hs
   ERROR "cap8.hs":4 - Syntax error in input (unexpected `=')   ERROR "cap8.hs":4 - Syntax error in input (unexpected `=')
  
-Pero el intérprete indica un error! Por qué? Porque ''='' es el símbolo de definición, mientras que la comparación es ''==''.+Pero el intérprete indica un error! Por qué? Porque "=es el símbolo de definición, mientras que la comparación es "==".
  
 Las traducciones de los símbolos son más o menos directas, de todas formas preparamos una tabla de [[http://cs.famaf.unc.edu.ar/introalg/PDF/traduccion.pdf|Traducción de "Cálculo de Programas" a Haskell]]. Las traducciones de los símbolos son más o menos directas, de todas formas preparamos una tabla de [[http://cs.famaf.unc.edu.ar/introalg/PDF/traduccion.pdf|Traducción de "Cálculo de Programas" a Haskell]].
Línea 90: Línea 93:
   Main>   Main>
  
-Ahora sí, la función es correcta y por ello el intérprete nos muestra el prompt "Main", que indica que hemos cargado alguna función más de las que hay en el preludio estándar, y que las funciones que hemos cargado son correctas.+Ahora sí, la función es correcta y por ello el intérprete nos muestra el prompt ''Main'', que indica que hemos cargado alguna función más de las que hay en el preludio estándar, y que las funciones que hemos cargado son correctas.
  
 Podemos probar la nueva función con //casos de test// para ganar confianza en su **corrección**. Podemos probar la nueva función con //casos de test// para ganar confianza en su **corrección**.
Línea 133: Línea 136:
   * Precedencia (''sgn -1'')   * Precedencia (''sgn -1'')
   * Tipos (''sgn 1.1'')   * Tipos (''sgn 1.1'')
-  * Sintáxis (''sgn (-1'')+  * Sintaxis (''sgn (-1'')
  
  
Línea 167: Línea 170:
  
 Esta maquinaria **impide** que escribamos cualquier expresión que esté mal tipada.   Esta maquinaria **impide** que escribamos cualquier expresión que esté mal tipada.  
 +
 +Todas las funciones suelen ir encabezadas por su signatura, es decir, el nombre de la función junto al tipo de sus parámetros y resultado. El nombre va seguido de ''::'' y los parámetros y el resultado van separados por ''->''. Por ejemplo:
 +
 +  sgn :: Int -> Int
 +  reverse :: [a] -> [a]
 +  map :: (a -> b) -> [a] -> [b]
  
  
 ===== Tuplas ===== ===== Tuplas =====
  
-Haskell maneja n-uplas de manera directa.+Haskell maneja n-uplas de manera directa. Las n-uplas nos permiten agrupar datos para manejarlos como una sola cosa, como veremos más adelante. 
 Incorporamos a ''cap8.hs'' las siguientes definiciones: Incorporamos a ''cap8.hs'' las siguientes definiciones:
  
Línea 187: Línea 197:
   (5,-1)   (5,-1)
  
 +Haskell también maneja listas de manera directa, pero lo veremos más adelante.
  
  
Línea 192: Línea 203:
  
 A manera de ejemplo veamos el ejercicio 8.7 del apunte, donde tenemos que definir una función muy útil para cualquier aparato que maneje un calendario (relojes, celulares, PDAs, computadoras, DVD-R, etc.). A manera de ejemplo veamos el ejercicio 8.7 del apunte, donde tenemos que definir una función muy útil para cualquier aparato que maneje un calendario (relojes, celulares, PDAs, computadoras, DVD-R, etc.).
-La signatura ((Signatura es el nombre de la función junto al tipo de sus parámetros y resultado)) es //bisiesto: Int -> Bool//, y es un predicado que devuelve //true// si el año es bisiesto y //false// en caso contrario.+La signatura es //bisiesto: Int -> Bool//, y es un predicado que devuelve //true// si el año es bisiesto y //false// en caso contrario.
 Recordemos cuando un año es [[http://es.wikipedia.org/wiki/Bisiesto|bisiesto]]: Recordemos cuando un año es [[http://es.wikipedia.org/wiki/Bisiesto|bisiesto]]:
  
Línea 244: Línea 255:
 Para realizar en lo que resta de la clase. Para realizar en lo que resta de la clase.
  
-  * Definir la función //sumaRat (a,b) (c,d)//, //sumaRat : (Int,Int) -> (Int,Int) -> (Int,Int)// que suma dos números racionales.\\ No es necesario realizar ninguna simplificación al resultado.+  * Definir la función //sumaRat (a,b) (c,d)//, //sumaRat : (Int,Int) -> (Int,Int) -> (Int,Int)// que suma dos números racionales. En esta función vamos a usar las tuplas para agrupar datos. En este caso, vamos a representar un número racional mediante una tupla, de forma que el numerador sea el primer elemento de la tupla, y el denominador sea el segundo. Por ejemplo, representamos ''3/4'' como ''(3,4)'', representamos ''5/2'' como ''(5,2)'', etc.  
 + 
 + No es necesario realizar ninguna simplificación al resultado.
  
   probar con (1,2) y (1,2), (1,4) y (1,4).   probar con (1,2) y (1,2), (1,4) y (1,4).
introalg/taller08_1.1207661955.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)