Clase 02 - Recursividad, listas, tuplas, pattern matching y orden superior

publicado a la‎(s)‎ 28 mar. 2014 5:51 por Mariana Matos   [ actualizado el 28 mar. 2014 6:46 ]
En esta clase hicimos el primer TP presencial que consistió en desarrollar la función esBisiesto que recibe y un año y retorna True en caso de ser bisiesto e inferir el tipo de una función definida por guardas. La corrección de los TPs pueden encontrarla en la planilla de notas del curso.

Contenidos

Los temas nuevos que vimos fueron:

También pueden leer los temas de los siguientes apuntes (pueden obviar los temas no vistos en la clase como listas por comprensión)

Módulo 2 (recursividad y pattern matching), Módulo 3 (Listas y Tuplas), Módulo 5 (Orden Superior)

Tarea

Para la clase que viene hay que resolver en máquina (o sea, programarlo, probarlo con Haskell y traer impreso el código y las consultas realizadas) este ejercicio:

Dado el siguiente dominio, donde cada instrumento es una tupla (modelo, costoBase, accesorios) y cada accesorio es una tupla (nombre, costoAccesorio)

Definir cada una de las siguientes funciones de dos formas alternativas (usando recursividad y usando funciones de orden superior):
costoTotal que recibe una tupla instrumento y devuelve el costo total (costo base + costo de los accesorios).
Main> costoTotal ("gibson les paul",2000,[("pickups",100),("pua",5)])
2105

costoDeInstrumentosCaros que recibe una lista de instrumentos y retorna la suma de los costos totales de los instrumentos caros. Un instrumento es caro si el costo total supera 1500.

También hay que traer resuelta la siguiente tabla de pattern matching como se indica a continuación:

El objetivo de este ejercicio es identificar qué patrones calzan con cada valor concreto. Los patrones que se encuentran en la primer columna serían, por ejemplo, el parámetro de una función f y los valores de la primer fila los argumentos con los cuales consultar esta función.



‘x’

“c”

1

(1,’c’)

(2,3)

[ ]

[1]

[1,’c’]

1:2:3:[]

[(“s”,2),(“t”,3)]

[(“t”,3,1), (“s”,4,2)]

[(“s”,4,2)]

x













y













1













‘c’













(1,x)













(x,z)













(2,x,z)













[ ]













(x:xs)













[x]













[1]













(1:xs)













(1:2:xs)













[1,2,3]













((x,y,2):xs)














Para cada combinación de patrón-valor llenar la tabla indicando si matchea, si no matchea o si existe algún otro problema que no sea de pattern matching (indicar a qué se debe).


Comments