Este manual contiene ejemplos de las funciones especificadas en los tipos abstractos de datos (TAD) estudiados en la asignatura de Informática de 1º del Grado en Matemáticas. Los códigos correspondientes se encuentran en esta página.

1 El TAD de las pilas (I1M.Pila)

λ> vacia
-
λ> apila 3 vacia
3|-
λ> apila 2 (apila 3 vacia)
2|3|-
λ> apila 5 (apila 2 (apila 3 vacia))
5|2|3|-
λ> foldr apila vacia [5,2,3] 
5|2|3|-
λ> let p1 = apila 5 (apila 2 (apila 3 vacia))
λ> cima p1
5
λ> p1
5|2|3|-
λ> let p1 = apila 5 (apila 2 (apila 3 vacia))
λ> desapila p1
2|3|-
λ> p1
5|2|3|-
λ> let p2 = apila 3 vacia
λ> esVacia p2
False
λ> esVacia (desapila p2)
True

2 El TAD de las colas (I1M.Cola)

λ> vacia
C []
λ> inserta 3 vacia
C [3]
λ> inserta 2 (inserta 3 vacia)
C [3,2]
λ> inserta 5 (inserta 2 (inserta 3 vacia))
C [3,2,5]
λ> foldr inserta vacia [5,2,3]
C [3,2,5]
λ> let c1 = inserta 5 (inserta 2 (inserta 3 vacia))
λ> primero c1
3
λ> let c1 = inserta 2 (inserta 5 (inserta 3 vacia))
λ> resto c1
C [2,5]
λ> let c2 = inserta 3 vacia
λ> esVacia c2
False
λ> esVacia (resto c2)
True

3 El TAD de las colas de prioridad (I1M.ColaDePrioridad)

λ> vacia
CP []
λ> inserta 3 vacia
CP [3]
λ> inserta 2 (inserta 3 vacia)
CP [2,3]
λ> inserta 5 (inserta 2 (inserta 3 vacia))
CP [2,3,5]
λ> foldr inserta vacia [5,2,3]
CP [2,3,5]
λ> let cp1 = inserta 5 (inserta 2 (inserta 3 vacia))
λ> primero cp1
2
λ> let cp1 = inserta 5 (inserta 2 (inserta 3 vacia))
λ> resto cp1
CP [3,5]
λ> let cp2 = inserta 3 vacia
λ> esVacia cp2
False
λ> esVacia (resto cp2)
True

4 El TAD de los conjuntos (I1M.Conjunto)

λ> vacio
{}
λ> inserta 3 vacio
{3}
λ> inserta 2 (inserta 3 vacio)
{2,3}
λ> inserta 5 (inserta 2 (inserta 3 vacio))
{5,2,3}
λ> foldr inserta vacio [3,2,5]
{3,2,5}
λ> let c1 = foldr inserta vacio [3,2,5]
λ> let c2 = foldr inserta vacio [5,2,3,5,3]
λ> c1 == c2
True
λ> let c1 = inserta 5 (inserta 2 (inserta 3 vacio))
λ> elimina 2 c1
{5,3}
λ> c1
{5,2,3}
λ> elimina 7 c1
{5,2,3}
λ> let c1 = inserta 5 (inserta 2 (inserta 3 vacio))
λ> pertenece 2 c1
True
λ> pertenece 7 c1
False
λ> let c2 = inserta 3 vacio
λ> esVacio c2
False
λ> esVacio (elimina 3 c2)
True

5 El TAD de las tablas (I1M.Tabla)

λ> tabla [(3,7),(1,5),(2,8)]
Tbl [(3,7),(1,5),(2,8)]
λ> let t1 = tabla [(3,7),(1,5),(2,8)]
λ> let t2 = tabla [(1,5),(3,7),(2,8)]
λ> t1 == t2
True
λ> let t1 = tabla [(3,7),(1,5),(2,8)]
λ> valor t1 2
8
λ> valor t1 3
7
λ> let t1 = tabla [(3,7),(1,5),(2,8)]
λ> modifica (1,9) t1
Tbl [(3,7),(1,9),(2,8)]

6 El TAD de los árboles binarios de búsqueda (I1M.ArbolBin)

λ> vacio
 -
λ> inserta 3 vacio
 (3 - -)
λ> inserta 2 (inserta 3 vacio)
 (3 (2 - -) -)
λ> inserta 5 (inserta 2 (inserta 3 vacio))
 (3 (2 - -) (5 - -))
λ> inserta 3 (inserta 5 (inserta 2 (inserta 3 vacio)))
 (3 (2 - -) (5 - -))
λ> foldr inserta vacio [5,2,3]
 (3 (2 - -) (5 - -))
λ> crea [5,2,3]
 (3 (2 - -) (5 - -))
λ> crea [3,5,2,3]
 (3 (2 - -) (5 - -))
λ> let a1 = crea [3,5,2,3]
λ> elementos a1
[2,3,5]
λ> let a1 = crea [3,5,2,3]
λ> pertenece 2 a1
True
λ> pertenece 4 a1
False
λ> let a1 = crea [3,5,2,3]
λ> elimina 3 a1
 (5 (2 - -) -)
λ> let a1 = crea [3,5,2,3]
λ> menor a1
2

7 El TAD de los montículos (I1M.Monticulo)

λ> vacio
λ> inserta 3 vacio
M 3 1 Vacio Vacio
λ> inserta 2 (inserta 3 vacio)
M 2 1 (M 3 1 Vacio Vacio) Vacio
λ> inserta 5 (inserta 2 (inserta 3 vacio))
M 2 2 (M 3 1 Vacio Vacio) (M 5 1 Vacio Vacio)
λ> foldr inserta vacio [5,2,3]
M 2 2 (M 3 1 Vacio Vacio) (M 5 1 Vacio Vacio)
λ> foldr inserta vacio [2,5,3]
M 2 1 (M 3 1 (M 5 1 Vacio Vacio) Vacio) Vacio
λ> let m1 = foldr inserta vacio [5,2,3]
λ> let m2 = foldr inserta vacio [2,5,3]
λ> m1 == m2
True
λ> let m1 = inserta 5 (inserta 2 (inserta 3 vacio))
λ> menor m1
2
λ> let m1 = inserta 5 (inserta 2 (inserta 3 vacio))
λ> resto m1
M 3 1 (M 5 1 Vacio Vacio) Vacio
λ> let m2 = inserta 3 vacio
λ> esVacio m2
False
λ> esVacio (resto m2)
True

8 El TAD de los polinomios (I1M.Pol)

λ> polCero
0
λ> consPol 0 7 polCero
7
λ> consPol 2 5 (consPol 0 7 polCero)
5*x^2 + 7
λ> consPol 4 6 (consPol 2 5 (consPol 0 7 polCero))
6*x^4 + 5*x^2 + 7
λ> consPol 1 6 (consPol 4 5 (consPol 0 7 polCero))
5*x^4 + 6*x + 7
λ> let p1 = consPol 1 6 (consPol 4 5 (consPol 0 7 polCero))
λ> grado p1
4
λ> let p1 = consPol 1 6 (consPol 4 5 (consPol 0 7 polCero))
λ> coefLider p1
5
λ> let p1 = consPol 1 6 (consPol 4 5 (consPol 0 7 polCero))
λ> restoPol p1
6*x + 7
λ> let p2 = consPol 0 7 polCero
λ> esPolCero p2
False
λ> esPolCero (restoPol p2)
True

9 Operaciones con el TAD de polinomios (I1M.PolOperaciones)

λ> creaTermino 2 5
5*x^2
λ> let p = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
λ> termLider p
x^5
λ> let p1 = consPol 4 3 (consPol 2 (-5) (consPol 0 3 polCero))
λ> let p2 = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
λ> sumaPol p1 p2
x^5 + 3*x^4 + 4*x + 3
λ> let t = consPol 1 4 polCero
λ> let p = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
λ> multPorTerm t p
4*x^6 + 20*x^3 + 16*x^2
λ> let p1 = consPol 4 3 (consPol 2 (-5) (consPol 0 3 polCero))
λ> let p2 = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
λ> multPol p1 p2
3*x^9 + -5*x^7 + 15*x^6 + 15*x^5 + -25*x^4 + -20*x^3 + 15*x^2 + 12*x
λ> polUnidad
1
λ> let p = consPol 4 3 (consPol 2 (-5) (consPol 0 3 polCero))
λ> valor p 0
3
λ> valor p 1
1
λ> valor p (-2)
31
λ> let p = consPol 4 6 (consPol 1 2 polCero)
λ> esRaiz 1 p
False
λ> esRaiz 0 p
True
λ> let p = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
λ> derivada p
5*x^4 + 10*x + 4
λ> let p1 = consPol 4 3 (consPol 2 (-5) (consPol 0 3 polCero))
λ> let p2 = consPol 5 1 (consPol 2 5 (consPol 1 4 polCero))
> restaPol p1 p2
-1*x^5 + 3*x^4 + -10*x^2 + -4*x + 3

10 El TAD de los grafos (I1M.Grafo)

λ> creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
G ND (array (1,3) [(1,[(3,7),(2,5)]),(2,[(1,5),(3,9)]),(3,[(2,9),(1,7)])])
λ> creaGrafo D (1,3) [(1,2,5),(2,3,9),(3,1,7)]
G D (array (1,3) [(1,[(2,5)]),(2,[(3,9)]),(3,[(1,7)])])
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> let g2 = creaGrafo D  (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> dirigido g1
False
λ> dirigido g2
True
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> let g2 = creaGrafo D  (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> nodos g1
[1,2,3]
λ> nodos g2
[1,2,3]
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> let g2 = creaGrafo D  (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> aristas g1
[(1,3,7),(1,2,5),(2,1,5),(2,3,9),(3,2,9),(3,1,7)]
λ> aristas g2
[(1,2,5),(2,3,9),(3,1,7)]
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> let g2 = creaGrafo D  (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> adyacentes g1 2
[1,3]
λ> adyacentes g2 2
[3]
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> let g2 = creaGrafo D  (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> aristaEn g1 (3,2)
True
λ> aristaEn g2 (3,2)
False
λ> let g1 = creaGrafo ND (1,3) [(1,2,5),(2,3,9),(3,1,7)]
λ> peso 3 2 g1
9