¡Esta es una revisión vieja del documento!
Clase 1
- Introducción al uso de Hugs
- Como escribir programas Haskell
Hugs es un intérprete del lenguaje funcional puro Haskell. Durante este taller vamos a utilizarlo para escribir, probar y utilizar 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. 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.
[nicolasw@azul Taller]$ hugs __ __ __ __ ____ ___ _________________________________________ || || || || || || ||__ Hugs 98: Based on the Haskell 98 standard ||___|| ||__|| ||__|| __|| Copyright (c) 1994-2005 ||---|| ___|| World Wide Web: http://haskell.org/hugs || || Report bugs to: hugs-bugs@haskell.org || || Version: March 2005 _________________________________________ Haskell 98 mode: Restart with command line option -98 to enable extensions Type :? for help 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). Gracias al preludio standard tenemos muchas funciones ya definidas.
Hugs.Base> 21+21 42 Hugs.Base> 2*4 == 10 `div` 5 && True False Hugs.Base> [2,3,5,7,11]++[1,2] [2,3,5,7,11,1,2] Hugs.Base> reverse "dabale arroz a la zorra el abad" "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
Hugs.Base> :q [Leaving Hugs] [nicolasw@azul Taller]$
Para poder dar nuevas definiciones y/o funciones necesitamos escribir un programa funcional o script Haskell. Un programa funcional es un 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 Extracto del Cálculo de Programas.
Para crear un script basta con invocar el comando para editar un (nuevo) archivo :e ejercicios8.hs
.
Una posible solución para el problema de la función signo es la siguiente:
sgn :: Int -> Int sgn x | 0<x = 1 | x<0 = -1 | x=0 = 0
Luego de salvar el programa y cargarlo, el intérprete indica un error
Hugs.Base> :e ejercicios8.hs Hugs.Base> :l ej Hugs.Base> :l ejercicios8.hs ERROR "ejercicios8.hs":4 - Syntax error in input (unexpected `=')
pues el signo igual lógico y no de definición es ==
.
Las traducciones son más o menos directas, de todas formas preparamos una tabla de 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
.
Podemos probar la nueva función para ganar confianza en su corrección.