introalg:taller1
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| introalg:taller1 [2006/05/01 18:43] – nicolasw | introalg:taller1 [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Clase 1 ====== | ====== Clase 1 ====== | ||
| + | |||
| + | Plan para hoy | ||
| + | |||
| * Introducción al uso de Hugs | * Introducción al uso de Hugs | ||
| - | * Como escribir programas Haskell | + | * Cómo escribir programas Haskell |
| + | * Escribiendo los primeros programas | ||
| - | ---- | + | ===== Clase ===== |
| - | [[http:// | + | [[http:// |
| - | Durante este taller | + | Durante este taller |
| A Hugs se lo invoca desde la //línea de comandos// o picando sobre el ícono en nuestro entorno gráfico. | A Hugs se lo invoca desde la //línea de comandos// o picando sobre el ícono en nuestro entorno gráfico. | ||
| - | Una vez que el intérprete | + | Una vez que el intérprete |
| [nicolasw@azul Taller]$ hugs | [nicolasw@azul Taller]$ hugs | ||
| Línea 24: | Línea 29: | ||
| Hugs.Base> | Hugs.Base> | ||
| - | En este modo Hugs se convierte en una calculadora esperando que se introduzca una expresión para luego evaluarla y volver a pedir una expresión (lazo **leer-evaluar-imprimir**). | + | De este modo Hugs se convierte en una calculadora, esperando que se introduzca una expresión para evaluarla |
| Gracias al //preludio standard// tenemos muchas funciones ya definidas. | Gracias al //preludio standard// tenemos muchas funciones ya definidas. | ||
| Línea 36: | Línea 41: | ||
| "daba le arroz al a zorra elabad" | "daba le arroz al a zorra elabad" | ||
| - | Este ciclo continua | + | Este ciclo continúa |
| Hugs.Base> | Hugs.Base> | ||
| Línea 42: | Línea 47: | ||
| [nicolasw@azul Taller]$ | [nicolasw@azul Taller]$ | ||
| - | Para poder dar nuevas definiciones y/o funciones necesitamos escribir un //programa funcional// o //script// Haskell. | ||
| - | Un programa funcional es un [[http:// | ||
| - | A manera de ejemplo realicemos un ciclo de creación-carga-prueba-modificacion-recarga, con el Ejercicio 8.3 del apunte [[http:// | + | |
| + | Para poder dar nuevas definiciones y/o funciones necesitamos escribir un //programa funcional// o //script// Haskell. \\ | ||
| + | Un programa funcional es un [[http:// | ||
| + | |||
| + | A manera de ejemplo realicemos un ciclo de **creación-carga-prueba-modificación-recarga**, con el Ejercicio 8.3 del apunte [[http:// | ||
| Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '': | Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '': | ||
| Línea 55: | Línea 62: | ||
| | x=0 = 0 | | x=0 = 0 | ||
| - | Luego de salvar el programa y cargarlo, el intérprete indica un error pues '' | + | Luego de salvar el programa y cargarlo, el intérprete indica un error pues '' |
| Hugs.Base> | Hugs.Base> | ||
| - | Hugs.Base> | ||
| Hugs.Base> | Hugs.Base> | ||
| ERROR " | ERROR " | ||
| Línea 64: | Línea 70: | ||
| Las traducciones son más o menos directas, de todas formas preparamos una tabla de [[http:// | Las traducciones son más o menos directas, de todas formas preparamos una tabla de [[http:// | ||
| - | Volvemos a editar el script con '': | + | Volvemos a editar el script con '': |
| Podemos probar la nueva función para ganar confianza en su **corrección**. | Podemos probar la nueva función para ganar confianza en su **corrección**. | ||
| Línea 101: | Línea 107: | ||
| A manera de ejemplo veamos el ejercicio 8.7, donde tenemos que definir una función muy útil para cualquier aparato que maneje un calendario (relojes, celulares, PDAs, computadoras, | A manera de ejemplo veamos el ejercicio 8.7, donde tenemos que definir una función muy útil para cualquier aparato que maneje un calendario (relojes, celulares, PDAs, computadoras, | ||
| - | La signatura es //bisiesto: Int -> Bool//, y es un predicado que devuelve //true// si el año es bisiesto y //false// en caso contrario. | + | La signatura |
| Recordemos cuando un año es [[http:// | Recordemos cuando un año es [[http:// | ||
| Línea 108: | Línea 114: | ||
| Entonces podemos seguir agregando definiciones de funciones a nuestro archivo '' | Entonces podemos seguir agregando definiciones de funciones a nuestro archivo '' | ||
| - | Veamos tres versiones distintas. | + | Veamos tres versiones distintas |
| **La del viejo programadora/ | **La del viejo programadora/ | ||
| Línea 124: | Línea 130: | ||
| | n `mod` 4 == 0 = n `mod` 100 /= 0 || n `mod` 400 == 0 | | n `mod` 4 == 0 = n `mod` 100 /= 0 || n `mod` 400 == 0 | ||
| - | **El que hizo [[http:// | + | **El que cursó |
| bisiesto :: Int -> Bool | bisiesto :: Int -> Bool | ||
| Línea 138: | Línea 144: | ||
| [1948, | [1948, | ||
| - | Podemos comprobar | + | Vemos que las tres funciones operan correctamente en el rango de números dados ((No queremos |
| + | |||
| + | ===== Ejercicios ===== | ||
| + | |||
| + | Para realizar en lo que resta de la clase. | ||
| + | * Ejercicio 8.7 | ||
| + | Definir la función //edad : (Nat, Nat, Nat) -> (Nat, Nat, Nat) -> Int// que dadas dos fechas indica los años transcurridos entre ellas. Por ejemplo edad.(20, | ||
| + | * Ejercicio 8.8 | ||
| + | En un prisma rectangular, | ||
| + | la siguiente definición del área del prisma: \\ | ||
| + | // | ||
| + | //|[ | ||
| + | donde //frente//, //lado// y //arriba// son las caras frontal, lateral y superior del prisma respectivamente. | ||
introalg/taller1.1146519817.txt.gz · Última modificación: (editor externo)
