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 21:34] – nicolasw | introalg:taller1 [2018/08/10 03:03] (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 | ||
bisiesto n = n `mod` 4 == 0 && (n `mod` 100 /= 0 || n `mod` 400 == 0) | bisiesto n = n `mod` 4 == 0 && (n `mod` 100 /= 0 || n `mod` 400 == 0) | ||
+ | |||
+ | Podemos poner las tres versiones en nuestro script y probarlas rápidamente usando la función '' | ||
+ | |||
+ | Main> filter bisiesto [1945..2006] | ||
+ | [1948, | ||
+ | Main> filter bisiesto' | ||
+ | [1948, | ||
+ | Main> filter bisiesto'' | ||
+ | [1948, | ||
+ | |||
+ | Vemos que las tres funciones operan correctamente en el rango de números dados ((No queremos decir que sean correctas en su totalidad, solo decimos que en ese rango no tienen fallas)). | ||
+ | |||
+ | ===== 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.1146519244.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)