Вы находитесь на странице: 1из 5

Práctica 1: Haskell y LATEX

Análisis Lógico

Miguel Carrillo y Laura Leonides

21 de febrero de 2011

En esta práctica conocerás los conceptos básicos del lenguaje de programa-


ción que utilizaremos durante el curso: Haskell. Asimismo, estableceremos
los formatos de entrega para las prácticas y daremos una rapidı́sima intro-
ducción a LATEX para que entregues tus reportes de manera adecuada.

1. Haskell

Haskell es un lenguaje funcional de evaluación perezosa. Un programa fun-


cional en Haskell consiste de un número de definiciones de funciones y otros
valores como números o pares ordenados.
Durante la sesión de laboratorio veremos distintas definiciones de funciones
para especificar un programa en Haskell. Almacena todas las funciones vistas
en el laboratorio en un archivo llamado Prac1.hs.

1.1. Compilador e intérprete

Haskell cuenta con diversos intérpretes y compiladores. Durante esta sesión


de laboratorio utilizaremos el Glasgow Haskell Compiler, en cuya distribu-
ción se incluye también un intérprete de Haskell.
Para correr el intérprete, desde la lı́nea de comandos, ve al directorio en
donde hayas almacenado Prac1.hs y ejecuta lo siguiente:
$ ghci Prac1.hs

1
Entonces se mostrará lo siguiente:

GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help


Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( Prac1.hs, interpreted )
Ok, modules loaded: Main.
*Main>

y podrás comenzar a evaluar las funciones que definiste en Prac1.hs.


Modifica el archivo Prac1.hs para agregar la función main y compı́lalo. Para
compilarlo, utiliza el siguiente comando:
$ ghc -o Prac1 Prac1.hs
Ahora ejecuta tu programa con el comando:
$ ./Prac1

2. LATEX

Junto con la especificación de esta práctica podrás descargar el archivo


Práctica1.tex que contiene el código en LATEX utilizado para generar el
pdf que estás leyendo.
Todo lo que se encuentra antes del ambiente document se conoce como pre-
ludio y es donde se especifica el tipo de documento, el tı́tulo, el autor y la
fecha, entre otras. Aquı́ también se indican los paquetes que se utilizarán.
Crea un archivo llamado ReportePrac1.tex. Éste deberá contener la espe-
cificación de un documento en LATEX de tipo article, en español, codificado
en utf-8. Especifica a los autores y el tı́tulo del documento. También incluye
algún texto dentro del ambiente document.
Compı́lalo mediante el comando:
$ pdflatex ReportePrac1.tex
Ábrelo en tu visor de pdf favorito.

2
3. Cuestionario

3.1. Haskell

1. Investiga qué quiere decir que la evaluación sea perezosa. Proporciona


ejemplos en los que se aprecie claramente en qué consiste la evaluación
perezosa.

2. ¿Para qué sirve la opción -o que utilizamos al compilar el archivo


Prac1.hs? Revisa qué otras opciones pueden utilizarse con el compi-
lador ghc y menciona tres de ellas.

3. Si cargas el archivo Prac1.hs en el intérprete ghci y después modificas


el archivo, ¿con qué comando vuelves a cargarlo en el intérprete para
que considere los cambios realizados?

4. ¿Para qué sirve la función show de Haskell?

5. ¿Qué utilidad tiene la función main? ¿Qué ocurre si defines un progra-


ma en Haskell que no tenga dicha función? ¿Afecta esto si utilizas un
intérprete?

3.2. LATEX

1. ¿Qué es TEX? ¿Qué es LATEX?

2. ¿Para qué sirve el ambiente verbatim utilizado en la sección de ejer-


cicios prácticos del archivo Práctica1.tex?

3. ¿Cuáles son los paquetes que se utilizan en el archivo Práctica1.tex?


¿Para qué sirven?

4. Enuncia el Teorema de la Deducción para pl. Claro, aquı́ el asunto


es que utilices el modo matemático y escribas bien los comandos para
que los sı́mbolos resultantes en el pdf sean los correctos.

4. Ejercicios prácticos

1. Da una definición de la función allFourEqual de tipo

3
Int -> Int -> Int -> Int -> Bool

que utilice a la función allEqual vista en la sesión de laboratorio.

2. Da la definición de la función factorial en Haskell. Antes piensa: ¿de


qué tipo será esta función? ¿Cuál es el caso base? ¿Cómo se usa la
recursión?

3. Da la definición de una función

ordenaTripleta :: (Int, Int, Int) -> (Int, Int, Int)

que regrese en orden ascendente los elementos de la tripleta que recibe.


Tal vez te sea más fácil definir primero la función para pares ordenados.

4. Implementa la función

prodList :: [Int] -> Int

que obtenga el producto de todos los elementos de una lista.

5. Formato de entrega

La práctica deberá ser entregada en equipos de cuatro o cinco integrantes.


Sólo deberá realizarse una entrega por equipo.
Fecha de entrega: Jueves 24 de febrero de 2011.

Todas las preguntas de la sección 3 deberás contestarlas y almacenar


tus respuestas en un documento en LATEX llamado ReportePrac1.tex.
Dicho documento debe contener los nombres de todos los integrantes
del equipo.

Compila el archivo y genera el pdf correspondiente, que deberá lla-


marse ReportePrac1.pdf.

Todas las preguntas de la sección 4 deberás implementarlas y alma-


cenarlas en el archivo Practica1.hs. Todo el código que incluyas en
dicho archivo deberá estar documentado como el ejemplo visto en la
sesión de laboratorio.

4
Crea la siguiente estructura de directorios:

AaaBbbCccDddEee
|-- Práctica 1
|-- src

Donde Aaa corresponde a las tres primeras letras del apellido paterno
del primer integrante del equipo, Bbb a las del segundo integrante y
ası́ sucesivamente.
Dentro de src pon todos los archivos fuente que hayas generado, es
decir, todos aquellos que contengan código. En este caso son dos:
Practica.hs y ReportePrac1.tex. Éste último no será necesario que
lo entregues en las siguientes prácticas.
Dentro de Práctica 1 pon ReportePrac1.pdf.
Al final, deberás tener los siguientes archivos y directorios:

AaaBbbCccDddEee
|-- Práctica 1
|-- ReportePrac1.pdf
|-- src
|-- Practica1.hs
|-- ReportePrac1.tex

Comprime el directorio AaaBbbCccDddEee en un archivo (puede ser


.rar, .zip, .7z, .tgz, o .bz2).
Envı́a el archivo comprimido a la dirección laura@ciencias.unam.mx
con el asunto (subject): ALógico – Práctica 1. Si quieres que todos
los miembros de tu equipo se enteren de los comentarios y la califica-
ción, inclúyelos en cc en ese mismo correo.

Recuerda:
Tu programa en Haskell debe compilar (o ser cargado por un intérprete) sin
generar errores. De no ser ası́, la parte de Ejercicios prácticos se conside-
rará como no entregada. Lo mismo para el archivo ReportePrac1.tex.
Es tu responsabilidad escribir bien la dirección de correo y no olvidar adjun-
tar el archivo comprimido. Si Laura no ha recibido un correo con todas las
caracterı́sticas especificadas antes del 24 de febrero a las 23:59:59, la práctica
se considerará como no entregada

Вам также может понравиться