Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin
Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014
UTN ! FRT Tema" Paradigma F#ncional $as%ell Objetivos: Introduccin. Lenguaje Haskell 98. Conceptos bsicos, caractersticas. La biblioteca !relude. Clculo La"bda. 1.1. Dada la siguiente declaracin de funcin que calcula el doble de su argumento: doble :: Integer Integer doble x = x + x Calcular el valor de la expresin 5*doble 3 , mediante reduccin de expresiones. Calcular el dobledoble3! utili"ando reduccin de expresiones en orden aplicativo # normal 1.$. Defina una expresin que calcule el coseno de $pi. 1.3. %robar en &as'ell # luego indicar que devuelve en cada caso: a! (, )a), *gato*! b! :t (, )a), *gato*! c! :t )a), *"apato*! d! :t *+as'ell*,*matematica*! e! :t ,rue, 5! f! :t -.-,* pepito *! g! :t *cualquiera*,3.1(,/alse!! 1.(. Definir una funcin que devuelva el predecesor # el sucesor del argumento como una tupla. 1.5. Definir una funcin recursiva fact que calcule el factorial de un numero natural +aciendo uso de patrones. 1.0. Definir la funcin maxEnt entre $ n1meros enteros utili"ando una expresin condicional # plantear la misma funcin con guarda. 1.2. Con expresin lambda una funcin una expresin lambda que calcule la suma de cuadrados. 1.3. Consideremos la siguiente funcin dosVeces :: (Integer Integer ) Integer Integer dosVeces f x = f (f x ) 4Cu5l es el tipo de la siguiente funcin. fun = dosVeces (+1) 6scribe una 78expresin equivalente a la funcin fun . 1. Problemas a resolver en clase Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT 6scribe una seccin equivalente a la funcin fun 1.9. Define una funcin que devuelva: ,odos los segmentos iniciales de una lista: ? inits [1, 2, 3] [ [ ], [1], [1, 2], [1, 2, 3] ] :: [[Integer ]] :os segmentos finales de una lista: ? tails [1, 2, 3] [ [1, 2, 3], [2, 3], [3], [ ] ] :: [[Integer ]] :os segmentos de datos consecutivos de una lista: ? segs [1, 2, 3] [ [ ], [1], [2], [3], [1, 2], [2, 3], [1, 2, 3] ] :: [[Integer ]] ;ota: no es necesario que los resultados apare"can en el mismo orden que en los e<emplos. 1.1=. De>nir por recursin la funcin sumar%ositivo :: ?@ntegerA 8B @nteger tal que sumar%ositivo xs! es la suma de los n1meros positivos de xs 6<: sumarPositivo [0,-1,3,-4,8,-1] == 12 1.11. Definir por comprensin, la funcin listaCuadradosC :: ?@ntegerA 8B ?@ntegerA, tal que listaCuadradosC xs! es la lista de los cuadrados de xs. 6<: listaCuadradosC ?1,$,5A CCB ?1,(,$5A Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT $.1 Dean las siguientes definiciones doble :: Integer Integer doble x = x + x cuadruple:: Integer Integer cuadruple x = doble (doble x ) Eeduce la expresin cuadruple 1 F $! utili"ando orden aplicativo, orden normal # evaluacin pere"osa. 2.2 Defina una expresin que calcule el volumen de un cilindro radio 5 cm altura 1= cm. $.3 6n caso de que sean correctas, 4Cu5l es el tipo de las siguientes expresiones. Di no son correctas indica porqueG . (True , True ) (True , False ) (True , a, False) (1 > 7, even 4, isUpper a )
[a, b, c ] abc $.( ,upla. Definir una funcin que dado dos puntos de coordenadas en un plano devuelva la distancia entre ellos. $.5 6scribe una funcin que devuelva el i8Hsimo n1mero de la sucesin de fibonacci. 6ste sucesin tiene como primer terrmino =, como segundo 1, # cualquier otro termino se obtiene sumado los dos que le preceden, es decir la secuencia es =, 1, 1, $, 3, 5, 3, 13, . . .. %or e<emplo: ? fibonacci 0 0 :: Integer ? fibonacci 6 8 :: Integer $.0 6l argumento de la funcin indica la posicin dentro de la secuencia del elemento que queremos obtener. Consideraremos que el primer elemento de la secuencia tiene 2 Problemas Pro&#estos Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT posicin cero. Definir una funcin recursiva que calcule la sucesion de fibonacci, +aciendo uso de patrones.
$.2 Definir la funcin minEnt entre 3 n1meros enteros utili"ando una expresin condicional # luego plantear la misma funcin con guarda $.3 Con expresin lambda una funcin una expresin lambda que calcule la superficie de un rect5ngulo $.9 6scribe una funcin que determine si un aIo es bisiesto, utili"ando una expresin condicional # plantear la misma funcin con guarda.. Jn aIo es bisiesto si es m1ltiplo de ( por e<emplo 193(!. Jna excepcin a la regla anterior es que los aIos m1ltiplos de 1== slo son bisiestos cuando a su ve" son m1ltiplos de (== por e<emplo 13== no es bisiesto, mientras que $=== lo ser5! : ? esBisiesto 1984 True:: Bool $.1= 6scribe una funcin derivada que devuelva la derivada de una funcin de reales en reales usando la siguiente definicin %ara aproximar el lKmite, simplemente eval1a la expresin con un valor pequeIo para L!: f 0 x = l f (x + !)
f x "#r e$e%l#: coseno :: Float Float ! 0 ! coseno = derivada sin ? derivada s!rt 1"0 0"499487 :: Float ? coseno 0"0 1"0 :: Float 4Cu5l es el tipo de la funcion derivada . $.11 Eeali"ar una funcin de recursin que multiplique $ n1meros sin usar el operador de multiplicacin. $.1$ &aciendo uso de la lista ?1..1=A definir las siguientes listas por comprensin. lista1 C ?11,1$,13,1(,15,10,12,13,19,$=A lista$ C ??$A,?(A,?0A,?3A,?1=AA lista3 C ?1=,9,3,2,0,5,(,3,$,1A lista( C ?,rue,/alse,,rue,/alse,,rue,/alse,,rue,/alse,,rue,/alseA Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT lista5 C ?3,,rue!,0,,rue!,9,,rue!,1$,/alse!,15,/alse!,13,/alse!A lista0 C ?11,1$!,13,1(!,15,10!,12,13!,19,$=!A lista2 C ??5,0,2A,?5,0,2,3,9A,?5,0,2,3,9,1=,11A,?5,0,2,3,9,1=,11,1$,13AA $.13 Definir la funcin suma tal suma n! es la suma de los n primeros n1meros. Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT $.1( Definir, por comprensin, la funcin sumaConsecutivos :: ?@ntA 8B ?@ntA tal que sumaConsecutivos xs! es la suma de los pares de elementos consecutivos de la lista xs. $.15 Definir por recursin la funcin borra :: 6q a CB a 8B ?aA 8B ?aA tal que borra x xs! es la lista obtenida borrando una ocurrencia de x en la lista xs. 3.1 6n caso de que sean correctas, 4Cu5l es el tipo de las siguientes expresiones. Di no son correctas indica porquH . (True , (a
, False )) isUpper isUpper a [True,#a#, False ] ([True , False ],a ) 3.$ Definir una funcin maximo::@nteger, @nteger!8B@nteger que devuelve el ma#or de sus dos argumentos. 3.3 Definir una funcin par::@nteger8BMool que indica si su argumento es par Dugerencia: Jtili"ar el operador NmodN!. 3.( Definir por recursin funcin listaCuadradosE :: ?@ntegerA 8B ?@ntegerA, Eeali"ar el calculo para listaCuadradosE?1,3,3A!. 3.5 Definir la funcin por recursin imparesC :: ?@nteger A8B ?@ntegerA tal que imparesC xs! es la lista de los n1meros impares de xs. %or e<emplo: imparesC ?1,$,3A CCB ?1,3A 3.0 De>nir la funcin potencia$ :: @nteger 8B @nteger 8B @nteger tal que potencia x n! es xn usando la siguiente propiedad: 3.2 De>nir la funcin eliminaDuplicados1 :: 6q a CB ?aA 8B ?aA tal que eliminaDuplicados xs! es una lista que contiene los mismos elementos que xs pero sin duplicados. ' Problemas (dicionales Universidad Tecnolgica Nacional Paradigmas de Programacin Paradigmas de Programacin Facultad Regional Tucumn Trabajo Prctico N 1 Ciclo 2014 UTN ! FRT 3.8 De>nir, por comprensin, la funcin enEangoC :: @nt 8B @nt 8B ?@nt] 8B ?@nt] tal que enEangoC a b xs! es la lista de los elementos de xs menores o iguales que a # menores o iguales que b. %or e<emplo, enEangoC 5 1= ?1..15] CCB ?5,0,2,3,9,1=] Dada dos listas de enteros, devolver de la primera lista los que son m1ltiplos de la segunda 3.9 Definir la funcin calcula%i tal que calcula%i n! es la aproximacin del n1mero pi calculada mediante la expresin (*1 8 1O3 F 1O5 8 1O2 F ...F 81!**nO$*nF1!! EQUIPO DE TRABAJO &' ()*"+ ,-.-/-0&: ")+12/+): 12345 ,2 2&T)2(5 5*6-7-5): LEGAJO APELLIDO Y NOMBRE FIRMA