Herramientas de usuario

Herramientas del sitio


introalg:taller1

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:taller1 [2006/05/01 22:00] nicolaswintroalg:taller1 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 4: Línea 4:
  
   * 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   * Escribiendo los primeros programas
  
Línea 11: Línea 11:
  
 [[http://haskell.org/hugs/|Hugs]] es un intérprete del lenguaje funcional puro [[http://haskell.org/|Haskell]]. \\ [[http://haskell.org/hugs/|Hugs]] es un intérprete del lenguaje funcional puro [[http://haskell.org/|Haskell]]. \\
-Durante este taller vamos a utilizarlo para escribirprobar utilizar los programas funcionales que se dan en el teórico.+Durante este taller escribiremosprobaremos utilizaremos los programas funcionales que se dan en el teórico.
  
 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 esta activo, la pantalla se presenta con un //prompt// a la espera de expresiones a ser evaluadas o commandos.+Una vez que el intérprete está activo, la pantalla se presenta con un //prompt// a la espera de expresiones a ser evaluadas o comandos.
  
   [nicolasw@azul Taller]$ hugs   [nicolasw@azul Taller]$ hugs
Línea 29: 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 calculadoraesperando que se introduzca una expresión para evaluarla e imprimir el resultado, luego volver a pedir una expresión (lazo **leer-evaluar-imprimir**). \\
 Gracias al //preludio standard// tenemos muchas funciones ya definidas. Gracias al //preludio standard// tenemos muchas funciones ya definidas.
  
Línea 41: Línea 41:
   "daba le arroz al a zorra elabad"   "daba le arroz al a zorra elabad"
  
-Este ciclo continua indefinidamente hasta que pidamos la salida del intérprete con CTRL-D o con el comando+Este ciclo continúa indefinidamente hasta que pidamos la salida del intérprete con CTRL-D o con el comando
  
   Hugs.Base> :q   Hugs.Base> :q
Línea 47: 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://es.wikipedia.org/wiki/Archivo_inform%C3%A1tico|archivo]] con terminación **.hs** donde se escriben en texto plano todas las definiciones que conforman el programa funcional. 
  
-A manera de ejemplo realicemos un ciclo de creación-carga-prueba-modificacion-recarga, con el Ejercicio 8.3 del apunte [[http://cs.famaf.unc.edu.ar/introalg/calculo_extracto.pdf|Extracto del Cálculo de Programas]].+ 
 +Para poder dar nuevas definiciones y/o funciones necesitamos escribir un //programa funcional// o //script// Haskell. \\  
 +Un programa funcional es un [[http://es.wikipedia.org/wiki/Archivo_inform%C3%A1tico|archivo]] con terminación **.hs** donde se escriben en //texto plano// todas las definiciones que conforman el programa funcional. 
 + 
 +A manera de ejemplo realicemos un ciclo de **creación-carga-prueba-modificación-recarga**, con el Ejercicio 8.3 del apunte [[http://cs.famaf.unc.edu.ar/introalg/calculo_extracto.pdf|Extracto del Cálculo de Programas]].
  
 Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '':e ejercicios8.hs''. Para crear un //script// basta con invocar el comando para editar un (nuevo) archivo '':e ejercicios8.hs''.
Línea 60: Línea 62:
           | x=0   = 0           | x=0   = 0
  
-Luego de salvar el programa y cargarlo, el intérprete indica un error pues ''='' es el símbolo de definición, mientras que el igual lógico es ''==''.+Luego de salvar el programa y cargarlo, el intérprete indica un error pues ''='' es el símbolo de definición, mientras que la comparación es ''==''.
  
   Hugs.Base> :e ejercicios8.hs   Hugs.Base> :e ejercicios8.hs
-  Hugs.Base> :l ej 
   Hugs.Base> :l ejercicios8.hs   Hugs.Base> :l ejercicios8.hs
   ERROR "ejercicios8.hs":4 - Syntax error in input (unexpected `=')   ERROR "ejercicios8.hs":4 - Syntax error in input (unexpected `=')
Línea 69: Línea 70:
 Las traducciones son más o menos directas, de todas formas preparamos una tabla de [[http://cs.famaf.unc.edu.ar/introalg/traduccion.pdf|Traducción de Cálculo de Programas a Haskell]]. Las traducciones son más o menos directas, de todas formas preparamos una tabla de [[http://cs.famaf.unc.edu.ar/introalg/traduccion.pdf|Traducción de Cálculo de Programas a Haskell]].
  
-Volvemos a editar el script con '':e'' (el nombre ya no lo necesitamos ya que tenemos cargado este script) y corregimos el ''x=0'' por ''x==0''.+Volvemos a editar el script con '':e'' (el nombre ya no lo necesitamos ya que tenemos cargado este script) y corregimos ''x=0'' por ''x==0''.
 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 129: 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://cs.famaf.unc.edu.ar/introalg/|Introducción a los Algoritmos]] ;-)**+**El que cursó [[http://cs.famaf.unc.edu.ar/introalg/|Introducción a los Algoritmos]] ;-)**
  
   bisiesto :: Int -> Bool   bisiesto :: Int -> Bool
Línea 143: Línea 144:
   [1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004]   [1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004]
  
-Podemos comprobar que las tres funciones operan correctamente en el rango de números dados ((eso no quiere decir que sean correcta en su totalidad, solo decimos que en ese rango no tiene fallas)).+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 ===== ===== Ejercicios =====
Línea 155: Línea 156:
 la siguiente definición del área del prisma: \\ la siguiente definición del área del prisma: \\
 //area.h.b.d = 2 ∗ frente + 2 ∗ lado + 2 ∗ arriba// \\ //area.h.b.d = 2 ∗ frente + 2 ∗ lado + 2 ∗ arriba// \\
-//|[   ...aca va la definicion...   ]// \\+//|[   ...aca va la definicion...   ]|// \\
 donde //frente//, //lado// y //arriba// son las caras frontal, lateral y superior del prisma respectivamente. donde //frente//, //lado// y //arriba// son las caras frontal, lateral y superior del prisma respectivamente.
- 
  
introalg/taller1.1146520827.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)