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:43] – 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 | ||
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: 2018/08/10 03:03 (editor externo)