Herramientas de usuario

Herramientas del sitio


introalg:taller1

¡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.

introalg/taller1.1146516534.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)