Pràctiques de Haskell
1.
Les
pràctiques es fan en equips de dues persones. Heu de triar si feu una pràctica
“fàcil” (7 punts sobre 10) o una de “menys fàcil” (10
punts). Llavors, poseu-vos en contacte amb el professor per indicar quina voleu
fer. El professor us donarà la conformitat o us suggerirà una altra pràctica
per tal que no tothom faci la mateixa.
2.
Heu de
lliurar un llistat amb les definicions de les funcions que hauran de tenir el
NOM QUE S’INDICA a L’ENUNCIAT i la DEFINICIÓ DE TIPUS. Per a les
definicions de tipus i funcions auxiliars feu servir el nom que vulgueu.
3.
Si considereu que alguna funció que feu servir
és quelcom “fosca”, expliqueu-la. Feu servir noms adients i doneu
els tipus de totes les funcions.
4.
Per a poder
optar a la primera convocatòria, heu de lliurar la abans del 22 de juny.
5.
Es valorarà
positivament l’ús de funcions d’ordre superior i la instanciació
dels tipus en diverses classes.
6.
ATENCIÓ, heu
de derivar els tipus principals de la pràctica de la classe Show usant INSTANCE
no deriving.
Pràctiques
1)
(7 punts)
A) Construeix un tipus de dades Arbrenari que sigui arbre n-ary “el més polimòrfic possible”, (per a qualsevol n).
·
Defineix-ne
una espècie de funció de plegament tipus fold per a les llistes, de manera que el pugui utilitzar per a definir:
o
sumaarbre_n_ari : tal que donat
un Arbrenari ens
calculi la suma de tots els seus números, suposant que aquests siguin enters.
o
mesgranarbre_n_ari: tal que donat un Arbrenari ens
digui quin és el número més gran que hi apareix.
·
Deriva’l correctament de la classe Eq i de la classe Show usant Instance.
·
Defineix una funció
amplada i que ens digui quina és l’amplada màxima
d’un nivell i quins són els elements
que la formen.
·
Defineix la funció
que fa recorregut en preordre preordre_n_ari.
B) Defineix el tipus Matriu i les següents funcions per al seu tractament:
1.
transposa
2.
suma
3.
producte
deriva-la de la classe Show de manera que les mostri per pantalla en forma de matrius.
1)
(7 punts)
A) Defineix el tipus Polinomi i les següents funcions per al seu tractament:
·
suma
·
producte
·
resta
·
valor que donat un polinomi i
un real ens doni el valor
de substituir al polinomi x
pel real.
derivala de la classe Show de manera que les mostri
per pantalla en forma de polinomis.
B) Fes el tipus Multiconjunt per a elements de la classe Eq i
les següents funcions per al seu tractament:
·
afegir
·
treureun
·
eliminar
·
quantes_ocurrencies
·
unio, interseccio,
resta
·
pertany
derivala de la classe Show de manera que les mostri
per pantalla en forma de llista.
3) (10 punts) Construiu
un tipus de dades Autodetregular que correspongui
als autòmates regulars deterministes i un tipus Autoindetregular que correspongui
als autòmates regulars indeterministes per al reconeixement de llenguatges regulars. Construeix-ne les funcions:
·
pertanyindet: tal que donat
un Autoindetregular i una paraula, ens digui si pertany
al llenguatge o no.
·
paraula: tal que donat un
Autodetregular , ens torni una paraula reconeguda per l’autòmata (si és possible)
Deriveu-lo correctament de la classe classe Show
4) (10 punts) Definiu
el tipus arbre binari Abin i deriveu-lo correctament de la classe classe Show :
rank Fulla
x =0
rank
Arrela x a1 a2
= rank
a1 +1 si rank a1
= rank a2
= max
{Rank a1, Rank a2} altrament
f(f(a,b), c) === [(f,[1,2]), (f,[1,2]), (a,[]),
(b,[]), (c, [])]
·
Feu les funcions:
1. quinarbre: tal que donat
un recorregut ens construeixi
l’arbre del que n’és recorregut.
2. recorregutoptim: tal que donat
un Abin, ens calculi el recorregut que passi primer pels subarbres de menys rank, i en cas d’igualtat, el de més a
l’esquerra, indicant quina es la permutació que segueix, per exemple:
recorregutoptim f(f(a,b), c) === [(f,[2,1]) (c,[]) (f,[1,2]) (a,[]),
(b,[])]
1. mateixarbre: tal que donats
dos recorregut, ens digui si ho són
del mateix arbre.
2. permdif: tal que donats
dos recorreguts ens digui
en quantes permutacions difereixen.
5) (10 punts) Definiu el tipus Lt (de
Lambda-Terme) i deriveu-lo correctament de la classe show: (per la lambda useu
“\” i per les variables “x1,
x2...”):
Heu de ser
capaços de definir els
termes que hem vist a teoria i mostrar que el factorial de 3 és
6.
(compte, la versió d’anys
anterior no val, ha de ser original!!! J)