Introducción. Haskell

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Introducción. Haskell"

Transcripción

1 Introducción Haskell 1

2 Valores, Tipos, Expresiones Los valores son entidades abstractas que podemos considerar como la respuesta a un cálculo Cada valor tiene asociado un tipo (<valor> :: <tipo>) 2 :: Int Int {...-3,-2,-1,0,1,2,3...} Las expresiones son términos construidos a partir de valores (2*3)+(4-5) La reducción o evaluación de una expresión consiste en aplicar una serie de reglas que transforman la expresión en un valor (2*3)+(4-5) 6+(4-5) 6+(-1)

3 Valores, Tipos, Expresiones (II) Un valor es una expresión irreducible Toda expresión tiene un tipo: el tipo del valor que resulta de reducir la expresión (Sistema Fuertemente Tipado). (2*3)+(4-5) :: Int El tipo de una expresión debe establecerse en tiempo de compilación sin evaluar la expresión (Tipado Estático) El compilador calcula el tipo de una expresión, normalmente, sin ninguna anotación del programador (Inferencia de Tipos) Las funciones también son valores (y por lo tanto tendrán tipo) 3

4 Tipos Básicos Int, subconjunto de los enteros (normalmente, los enteros representables por una palabra del procesador): 2, Integer, enteros (precisión absoluta) Char, caracteres: a, 5, \n, \xf4... Float/Double, números en punto flotante de simple/doble precisión: , 2, 2.5e+2... String, cadenas de caracteres: "hola",... Bool, booleanos: True, False 4

5 Definiciones Asociamos identificador y expresión (<id> = <expr>) x = (2*3)+(4-5) y = x^2 Opcionalmente, podemos incluir una anotación de tipo: x :: Int x = (2*3)+(4-5) A pesar de que son inferidas automáticamente, las anotaciones de tipo se suelen añadir para ciertas definiciones por: Documentación Localización de errores Facilitar optimización (sobrecarga) 5

6 Definición local let...in Definición local: let <id> = <e 1 > in <e 2 > let x = 2*3 in x+1 La definición local es una expresión, cuyo tipo es el de e 2 (let x = 2*3 in x+1) + 5 Semántica: Sustituimos id por su definición e 1 en e 2 let x = 2*3 in x+1 x+1[2*3/x] (2*3)+1 7 Ámbito de la definición let x = 1 in let y = 2 in x+y y x 6

7 Definición local where Definición local: <e 2 > where <id> = <e 1 > x+1 where x = 2*3 Ambigüedad entre let...in y where x where let x = 5 in x*x x let...in where x = 6 Se permite definir múltiples identificadores simultáneamente: let x = 5 x+y where x = 5 y = 6 y = 6 in x+y 7

8 Regla del Contexto Las declaraciones de una definición local, se delimitan con llaves ({}), y punto y coma (;) a+b where { a=5; b=4 } Opcionalmente, podemos usar el contexto como delimitador a+b where a=5 b=4 El contexto se puede usar en cualquier lista de declaraciones de let..in, where, y case let y = 7 x = y where y = 8 z = 2 in y+x+z z = 4 8

9 Expresión Condicional Expresión Condicional: if <e 1 > then <e 2 > else <e 3 > Semántica: if 2+3==5 then "ho. el se "la" Si e 1 True entonces if... e 2 Si e 1 False entonces if... e 3 if 2+3==5 then ho else la ho La guardia de la expresión condicional debe ser de tipo Bool Las ramas then y else deben tener igual tipo El tipo de la expresión condicional es el tipo de la rama then 9

10 Funciones Función matemática: Transparencia Referencial (f x = f x) Definición: <función> <argumento> = <expresión> sucesor x = x+1 cuadrado y = y*y Una función que toma como argumento algo de tipo T 1 y lo transforma en algo de tipo T 2 tiene por tipo T 1 T 2 sucesor :: Int ->Int La aplicación de una función f a e (f e) se define como la sustitución del argumento de f por e en el cuerpo de f sucesor 5 x+1[5/x]

11 Funciones (II) Todas las definiciones dentro del mismo contexto son mutuamente recursivas: f x = g (x-1) g x = if x == 0 then 0 else f (x-1) f 3 g 2 f 1 g 0 0 f 4 g 3 f 2 g 1 f 0 g (-1)... Si f no está definida en x, decimos que f x = Función anónima: \<arg> -> <expr> (\x ->x+2) 4 x+2[4/x] La definición de funciones es una ayuda sintáctica: sucesor x = x+1 sucesor = \x ->x+1 11

12 Guardias Ayuda sintáctica para la definición de funciones: <función> <argumento> <guardia 1 > = <expr 1 > <guardia 2 > = <expr 2 >.. <guardia n > = <expr n > Las guardias deben ser de tipo Bool; las expr i tienen que ser del mismo tipo (imagen de la función) Las guardias se evalúan de arriba a abajo, hasta encontrar una guardia i que sea True la función devuelve expr i otherwise (o True) puede usarse como caso por defecto fact n n == 0 = 1 otherwise = n * fact (n-1) 12

13 Funciones de Orden Superior Funciones que reciben como argumento una función o que devuelven una función como resultado: Función como argumento: f1 :: (Int -> Int) -> Int f1 g = 2 + g 3 Función como resultado: f2 :: Int -> (Int -> Int) f2 x = \y -> x+y Función como argumento y como resultado: f3 :: (Int -> Int) -> (Int -> Int) f3 g = \y -> 2 * g (y+1) 13

14 Funciones de Orden Superior (II) Diferentes formas de escribir lo mismo f = \x -> (\y -> x+y) f = \x -> \y -> x+y f x = \y -> x+y f x y = x+y f = \x y -> x+y (f 3) es una función Int ->Int que dado y, devuelve 3+y. (f 3) 4 ((\x ->x+y) 3) 4 (\y ->3+y) La aplicación asocia por la izquierda: (f 3) 4 f 3 4 El constructor de tipo -> asocia por la derecha: Int ->(Int ->Int) Int ->Int ->Int (Int ->Int) ->Int Int ->Int ->Int 14

15 Funciones con Varios Argumentos Todas las funciones tienen un único argumento (Dominio) y devuelven un único resultado (Imagen) Una función que devuelve una función como resultado, puede considerarse como una función de dos argumentos: f :: Int ->Int ->Int f f x y = x+y f 3 \y ->3+y (Aplicación parcial) Si es un operador infijo, ( ) es una función prefija equivalente a+b (+) a b Si f es una función de 2 argumentos, f es un operador infijo equivalente mod a b a mod b 15

16 Pattern-Matching Definir ecuaciones basadas en la forma del argumento Forma más simple: constantes e identificadores fact 0 = 1 fact n = n * fact (n-1) Comprueba de arriba a abajo hasta encontrar el patrón que encaje Una constante sólo encaja con un argumento igual Un identificador encaja con cualquier argumento El comodín _ hace las veces de identificador Se puede combinar con las guardias fib 0 = 1 fib 1 = 1 fib n n > 1 = fib (n-2) + fib (n-1) otherwise = error "fib de un número negativo" 16

17 Producto cartesiano Tipo Producto (Tuplas) A = {1, 2, 3} B = {a, b} A B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)} Si a :: T 1 y b :: T 2 entonces (a,b) :: (T 1,T 2 ) Generalizable para tuplas de aridad n > 2 (True, "hola", \x -> x ++ ".") :: (Bool, String, String -> String) Funciones sobre tuplas: Uso de pattern-matching mayor :: (Int,Int,Int) -> Int mayor (x,y,z) x > y && x > z = x y > x && y > z = y otherwise = z Los componentes de una tupla pueden ser otras tuplas ((1,2),3) :: ((Int,Int),Int) (1,(2,3)) :: (Int,(Int,Int)) (1,2,3) :: (Int,Int,Int) 17

18 Tipo Producto (Tuplas) (II) Un uso: implementar funciones de varios argumentos suma :: (Int,Int) -> Int suma (x,y) = x+y Otro uso común: Funciones que devuelven varios resultados sumayproducto :: Int -> Int -> (Int,Int) sumayproducto m n m > n = (0,1) otherwise = let (s,p) = sumayproducto (m+1) n in (m+s, m*p) El uso de sinónimos de tipo simplifica las anotaciones de tipo type Jugador = (String, String, Int) roberto :: Jugador roberto = ("Roberto Carlos", "Brasil", 3) nacionalidad :: Jugador -> String nacionalidad (_,pais,_) = pais 18

19 Polimorfismo El mismo código puede ser utilizado con distintos tipos Distinguimos tipos (con mayúsculas) de variables de tipo (con minúsculas) pueden ser reemplazadas por cualquier tipo El tipo de id dada su definición id x = x es a ->a. La variable de tipo a puede reemplazarse por cualquier tipo válido, dando lugar a todos las posibles usos de id: Sustitución de a Int (Int,Int) Int ->Int. Tipo resultante para id Int ->Int (Int,Int) ->(Int,Int) (Int ->Int) ->(Int ->Int). Un tipo e que contiene una variable de tipo a (esquema de tipo) es realmente a tipos. e 19

20 Polimorfismo (II) Polimorfismo + Funciones de Orden Superior = Abstracción prod :: (a -> b) -> (c -> d) -> (a,c) -> (b,d) prod (f,g) = par (f.fst, g. snd) sumayproducto :: Int -> Int -> (Int,Int) sumayproducto m n m > n = (0,1) otherwise = prod (+m) (*m) (sumayproducto (m+1) n) Si es un operador binario, ( a) es (\x ->x a) y (a ) es (\x ->a x) (secciones) Composición de funciones: operador. (predefinido) (.) :: (a -> b) -> (c -> a) -> (c -> b) f. g = \x -> f (g x) f = (+1). (^2) 20

21 Currificación Dos formas de representar funciones multiargumento: Currificada: Utilizando funciones de orden superior suma :: Int -> Int -> Int suma x y = x+y Decurrificada: Utilizando funciones sobre tuplas suma :: (Int,Int) -> Int suma (x,y) = x+y Preferencia: currificadas (por el uso de aplicación parcial) Es posible transformar un formato en el otro (predefinidas) curry :: ((a,b) -> c) -> (a -> b -> c) curry f = \x -> \y -> f (x,y) uncurry :: (a -> b -> c) -> ((a,b) -> c) uncurry f = \(x,y) -> f x y El término currificación se establece en honor a Haskell B. Curry 21

22 Listas Colección ordenada de valores homogéneos Si a 1 ::T, a 2 ::T,..., a n ::T entonces [a 1,a 2,...,a n ] :: [T ] Algunos ejemplos: [1,2,3] :: [Int] [ (True,1), (False,2) ] :: [(Bool,Int)] [ (+1), (^2), (\x -> x) ] :: [Int -> Int] [ [1,2,3], [4], [5,6] ] :: [[Int]] Las listas se crean a partir de dos constructores: [] :: [a], la lista vacía (:) :: a ->[a] ->[a], constructor infijo que a partir de un elemento y una lista construye una lista nueva, resultado de pegar el elemento en la cabeza de la lista 1:(2:(3:[])) 1:2:3:[] [1,2,3] a:(b:c) (a:b):c 22

23 Listas (II) Funciones sobre listas: pattern-matching null :: [a] -> Bool null [] = True null _ = False -- predefinida head :: [a] -> a head (x:_) = x tail :: [a] -> [a] tail (_:xs) = xs -- predefinida -- predefinida last :: [a] -> a last (x::xs) = if null xs then x else last xs init :: [a] -> [a] init (x:xs) = in null xs then [] else init xs concat :: [[a]] -> [a] concat [] = [] concat (xs:xss) = xs ++ concat xss Herramienta fundamental: inducción 23

24 sum :: [Int] -> Int sum [] = 0 sum (x:xs) = x + sum xs -- predefinida sum :: [Int] -> Int sum xs = if xs == [] then 0 else head xs + sum (tail xs) 24

25 Funciones sobre listas (II) reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] length :: [a] -> Int length [] = 0 length (_:xs) = 1 + length xs -- predefinida (++) :: [a] -> [a] -> [a] -- predefinida [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) take :: Int -> [a] -> [a] take 0 xs = [] take _ [] = [] take n (x:xs) = x: take (n - 1) xs drop :: Int -> [a] -> [a] drop 0 xs = xs drop _ [] = [] drop n (x:xs) = drop (n - 1) xs 25

26 Funciones sobre listas (III) (!!) :: [a] -> Int -> a (x:xs)!! 0 = x (x:xs)!! n = xs!! (n - 1) map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = fx : map f xs filter :: (a -> Bool) -> [a] -> [a] filter p [] = [] filter p (x:xs) = if p x then x: filter p xs else filter p xs zip :: [a] -> [b] -> [(a,b)] zip [] _ = [] zip _ [] = [] zip (x:xs) (y:ys) = (x,y) : zip xs ys zipwith :: (a -> b -> c) -> [a] -> [b] -> [c] zipwith f xs ys = map (uncurry f) (zip xs ys) 26

27 Funciones sobre listas (IV) zipp :: ([a], [b]) -> [(a,b)] zipp = uncurry zip zippwith :: (a -> b -> c) -> ([a], [b]) -> [c] zippwith f = map (uncurry f). zipp par (f,g) x = (f x, g x) unzip :: [(a,b)] -> ([a],[b]) unzip = par (map fst, map snd) 27

28 La familia de funciones fold foldr :: (a -> b -> b) -> b -> [a] -> b foldr f e [] = e foldr f e (x:xs) = f x (foldr f e xs) foldl :: (b -> a -> b) -> b -> [a] -> b foldl f e [] = e foldl f e (x:xs) = foldl f (f e x) xs foldr1 :: (a -> a -> a) -> [a] -> a foldr1 f (x:xs) = if null xs then x else f x (foldr1 f xs) foldl1 :: (a -> a -> a) -> [a] -> a foldl1 f (x:xs) = foldl f x xs 28

29 concat :: [[a]] -> [a] concat = foldr (++) [] Definiciones con foldr reverse :: [a] -> [a] reverse = foldr snoc [] where snoc x xs = xs ++ [x] length :: [a] -> Int lenght = foldr increm 0 where increm x n = 1 + n sum :: Num a => [a] -> a sum = foldr (+) 0 and :: [Bool] -> Bool and = foldr (&&) True map :: (a -> b) -> [a] -> [b] map f = foldr (cons. f) [] where cons x xs = x:xs 29

30 Definiciones con foldr (II) maxlist :: (Ord a, Bounded a) => [a] -> a maxlist = foldr ( max ) minbound unzip :: [(a,b)] -> ([a],[b]) unzip = foldr conss ([],[]) where conss (x,y) (xs, ys) = (x:xs, y:ys) 30

31 inits & tails inits :: [a] -> [[a]] inits [] = [[]] inits (x:xs) = [] : map (x:) (inits xs) tails :: [a] -> [[a]] tails [] = [] tails (x:xs) = (x:xs) : tails xs 31

32 La familia de funciones scan scanl :: (a -> b -> a) -> a -> [b] -> [a] scanl f e = map (foldl f e). inits scanl :: (a -> b -> a) -> a -> [b] -> [a] -- eficiente scanl f e [] = [e] scanl f e (x:xs) = e : scanl f (f e x) xs scanr :: (a -> b -> b) -> b -> [a] -> [b] scanr f e = map (foldr f e). tails scanr :: (a -> b -> b) -> b -> [a] -> [b] -- eficiente scanr f e [] = [e] scanr f e (x:xs) = f x (heay ys) : ys where ys = scanr f a xs 32

33 Leyes de take & drop Leyes take m. take n = take (m min n) drop m. drop n = drop (n + m) take m. drop m = drop n. take (m + n) Leyes del map map id = id map (f. g) = map f. map g f. head = head. map f map f. tail = tail. map f map f. reverse = reverse. map f map f. concat = concat. map (map f) Leyes del filter filter p. filter q = filter (p and q) x && q x filter p. concat = concat. map (filter p) donde (p and q) x = p 33

34 Leyes del prod y par Leyes (II) prod(f,g) = par(f.fst, g.snd) prod(f,g).par(h,k) = par(f.h,g.k) par (f,g).h = par(f.h,g.h) Leyes del zip zipp(unzip xys) = xys prod(map f, map g).unzip = unzip.map(prod(f,g)) zipp.prod(map f, map g) = map(prod(f,g)).zipp 34

35 Teoremas de la dualidad Primer teorema de la dualidad foldr ( ) e xs = foldl ( ) e xs cuando : es asociativo e es su elemento neutro Segundo teorema de la dualidad foldr ( ) e xs = foldl ( ) e xs cuando para todo x, y, y z: x (y z) = (x y) z z e = e x Tercer teorema de la dualidad foldr f e xs = foldl (flip f) e (reverse xs) donde flip f x y = f y x 35

36 Teorema de fusión para foldr f. foldr g a = foldr h b cuando : f es estricta f a = b Teoremas de fusión f (g x y) = h x (f y) para todo x e y Teorema de fusión para foldl f. foldl g a = foldl h b cuando : f es estricta f a = b f (g x y) = h (f x) y para todo x e y 36

37 Teorema de fusión fold-map Teoremas de fusión(ii) foldr f a. map g = foldr (f. g) a cuando : foldr f a es estricta Teorema de fusión fold-concat foldr f a. concat = foldr (flip foldr f)) a cuando : foldr f a es estricta Ley del Contable foldr f e.concat=foldr f e.map(foldr f e) cuando : f es asociativa e es su elemento neutro 37

38 Ley de fusión fold-scan Teoremas de fusión(ii) foldr1 ( ).scanl ( ) e = foldr ( ) e cuando: x y = e ( x y) otimes es asociativo e es su elemento neutro es distributivo con respecto a : x (y z = (x y) (x z) 38

39 Mayor suma de segmentos Dada una secuencia de números, se pide calcular la mayor de las sumas de todos los segmentos de la secuencia. Por ejemplo, la secuencia: [ -1, 2, -3, 5, -2, 1, 3, -2, -2, -3, 6] tiene como mayor suma 7, que es la suma del segmento [5, -2, 1, 3]. 39

40 Mayor suma de segmentos(ii) mss :: [Int] -> Int mss = maxlist.map sum.segs segs :: [a] -> [[a]] segs = concat.map inits. tails La evaluación directa de mss necesita un número de pasos proporcional a n 3 para una lista de longitud n. Hay aproximadamente n 2 segmentos y sumar todos ellos necesita aproximadamente n 3 pasos. 40

41 Mayor suma de segmentos(iii) Sustituimos la definición de segs en mss: maxlist.map sum.concat.map inits.tails usamos la ley del map map f.concat = concat. map (map f) maxlist.concat.map (map sum).map inits.tails usamos la ley del contable foldr f e.concat=foldr f e.map(foldr f e) maxlist.map maxlist..map (map sum).map inits.tails usamos la ley map (f.g) = map f. map g) maxlist.map maxlist.map (map sum.inits).tails usamos la ley map (f.g) = map f. map g) maxlist.map (maxlist.map sum.inits).tails 41

42 Mayor suma de segmentos(iii) sustituimos map sum.inits = scanl (+) 0 maxlist.map (maxlist.scanl (+) 0).tails dado que maxlist = foldr1 ( max ) y (+) es distributivo con respecto a ( max ) aplicamos la lef de fusión fold-scan maxlist.map (foldr ( ) 0).tails donde x y = 0 max (x + y) sustituimos map (foldr f e). tails = scanr f e maxlist.scanr ( ) 0 El resultado es un programa que calcula la mayor suma de segmentos en tiempo lineal 42

43 Strings El tipo String es un sinónimo de tipo: type String = [Char] Sintaxis especial para las cadenas de caracteres: [ h, o, l, a ] "hola" "hola "++ [ m, u, n, d, o ] == "hola mundo" amayusculas :: String -> String amayusculas [] = [] amayusculas (x:xs) = toupper x : amayusculas xs 43

44 Enumeraciones Lista de elementos entre m y n: enumfromto :: Int -> Int -> [Int] -- predefinida enumfromto m n m > n = [] otherwise = m : enumfromto (m+1) n Forma alternativa: enumfromto m n == [m..n] [3..7] == enumfromto 3 7 == [3,4,5,6,7] Otra forma de definir una lista: [m,m + k..n] [m,m + k..n] [m,m + k,m + 2k,...,m + ck] m + ck n < m + (c + 1)k [3,5..10] == enumfromthento == [3,5,7,9] También vale con Char [ a.. z ] == [ a, b,..., z ] == "abcdefghijklmnopqrstuvwxyz" 44

45 Comprensión de listas (List Comprehension) Construcción de listas basándonos en otras listas Forma más simple: [expr pat <- lista] pat <- lista es un generador: se recorre lista secuencialmente y se hace pattern-matching con pat. La lista resultado tiene un elemento por cada elemento generado, que se calcula según expr [ 2*x x <- [1..10]] == [2,4,6,8,10,12,14,16,18,20] Es posible más de 1 generador: [expr pat 1 <- l 1,...,pat n <- l n ] [(x,y) x <- [1..3], y <- [True,False]] == [(1,True), (1,False), (2,True), (2,False), (3,True), (3,False)] [(x,y) x <- [1..3], y <- [1..x]] == [(1,1), (2,1), (2,2), (3,1), (3,2), (3,3)] 45

46 Comprensión de listas (List Comprehension) (II) Guardias para limitar generación: [expr pat <- lista, guardia] [2*x x <- [1..10], x > 5] == [12,14,16,18,20] [(x,y) x <- [1..3], y <- [1..3], x /= y] == [ (1,2), (1,3), (2,1), (2,3), (3,1), (3,2) ] Simplificación de definiciones: menores_que k xs = [ x x <- xs, x < k ] filter p xs = [ x x <- xs, p x ] map f xs = [f x x <- xs] qs [] = [] qs (x:xs) = qs [y y <- xs, y < x] ++ [x] ++ qs [y y <- xs, y >= x] 46

47 Mónadas El grupo de las operaciones de entrada salida en Haskell se denota como IO (). Una exprosion de tipo IO () denota una acción; cuando se evalúa, la acción se realiza. Escribir un carácter: putchar :: Char -> IO () No hacer nada done :: IO () Combinar dos acciones de E/S (>>) :: IO () -> IO () -> IO () Escribir un String write :: String -> IO () write [] = done write (x:xs) = putchar x >> write xs 47

48 Mónadas(II) Escribir un String terminado en retorno de carro writeln :: String -> IO () writeln xs = write xs >> putchar \n Leer un carácter getchar :: IO Char Generalización de done return :: a -> IO a Implementación de done done :: IO () done = return () Generalización del tipo de (>>) (>>) :: IO a -> IO b -> IO b si p y q son acciones, entonces p >> q es una acción que, cuando se realice, primero efectúa p, ignora el valor devuelto y despus realiza q. 48

49 Generalización de (>>) Mónadas(II) (>>=) :: = IO a -> (a -> IO b) -> IO b Leer n caracteres readn :: Iont -> IO String readn 0 = return [] readn n = getchar >>= q where q c = read (n-1) >>= r where r cs = return (c:cs) Clase Monad class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b Notación do readn :: Iont -> IO String readn 0 = return [] readn n = c <- getchar cs <- readn (n-1) return (c:cs) 49

50 Leyes de las Mónadas return es un elemento neutro por la derecha de >> p >>= return == p return es un elemento neutro por la izquierda de >> en el sentido (return e) >>= q = q e >>= es asociativa en el siguiente sentido (p >>= q) >>= r = p >>= s where s x = (q x >>= r) 50

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión

Más detalles

Programación con listas. El tipo lista

Programación con listas. El tipo lista Capítulo 6. Programación con listas 68 Programación con listas El tipo lista La lista representa colecciones de objetos homogéneas (todos los objetos han de tener el mismo tipo). infixr 5 : data [a] =

Más detalles

Tema II: Introducción al Lenguaje Funcional

Tema II: Introducción al Lenguaje Funcional Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)

Más detalles

Programación Funcional

Programación Funcional Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay Operaciones sobre listas Listas El tipo de las listas es uno de los más usados en PF Su

Más detalles

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort

Más detalles

Introducción a Haskell. Cecilia Manzino

Introducción a Haskell. Cecilia Manzino Paradigmas de programación Un paradigma de programación representa un estilo particular o filosofía para la construcción del software. Los más comunes dan lugar a los siguientes tipos de programación:

Más detalles

Tipos en Haskell. Cecilia Manzino

Tipos en Haskell. Cecilia Manzino Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2017 18) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema

Más detalles

Guía 2: Listas, recursión e inducción

Guía 2: Listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos

Más detalles

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show Preguntas seleccionadas de pruebas de evaluación Pregunta 1 Dadas las siguientes definiciones: data Tree a = Tip Node a (Tree a) (Tree a) deriving Show cambiar :: [Int] -> Tree [Int] -> Tree [Int] cambiar

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n! Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para

Más detalles

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición: Ejercicios de Introducción a Haskell Informática de 1 o de Matemáticas Ejercicio 1 Consideremos la siguiente definición: doble x = x + x El valor de doble(doble 3) se puede calcular usando distintos métodos

Más detalles

Introducción a OCaml. October 19, 2015

Introducción a OCaml. October 19, 2015 Introducción a OCaml October 19, 2015 OCaml: introducción Es un dialecto de ML. Lenguaje de programación funcional. Fuertemente tipado. Con inferencia de tipos. Polimórfico. [Página oficial: http://www.ocaml.org/

Más detalles

Introducción a Haskell. El lenguaje Haskell

Introducción a Haskell. El lenguaje Haskell Capítulo 2. Introducción a Haskell 9 Introducción a Haskell Un ejemplo de fichero Haskell El lenguaje Haskell Haskell es un lenguaje funcional puro, no estricto y fuertemente tipificado. Puro = transparencia

Más detalles

El sistema de clases de Haskell. Introducción

El sistema de clases de Haskell. Introducción Capítulo 5. El sistema de clases de Haskell 56 El sistema de clases de Haskell Introducción Función monomórfica: sólo se puede usar para valores de un tipo concreto not :: Bool Bool not True = False not

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones

Más detalles

Programación Funcional

Programación Funcional Programación Funcional 2 Tabla de Contenidos 0.1. Evolución y Conceptos básicos................... 4 0.2. Definición de funciones........................ 4 0.3. Sistema de Tipos...........................

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

Funciones Segunda parte

Funciones Segunda parte Expresiones condicionales Matemática Discreta usando el computador 2011 Funciones Segunda parte Una expresión condicional utiliza una expresión de tipo Bool para decidir entre dos opciones Estructura if...then...

Más detalles

Práctica N o 1 - Programación Funcional

Práctica N o 1 - Programación Funcional Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente

Más detalles

Tema 2. Tipos predefinidos

Tema 2. Tipos predefinidos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 2. Tipos predefinidos 2.1 Tipos simples predefinidos El tipo Bool El tipo Int El tipo Integer

Más detalles

Tipos de datos y clases de tipos

Tipos de datos y clases de tipos Tipos de datos y clases de tipos Taller de Álgebra I Verano 2017 Tipos de datos Tipo de dato Un conjunto de valores a los que se les puede aplicar un conjunto de funciones. Ejemplos 1 Integer = (Z, {+,,,

Más detalles

Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell

Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell Pedro A. Góngora Luna 1 1. Operadores La figura 1 muestra la lista de algunos de los operadores básicos definidos en el preludio. La lista

Más detalles

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015 Listas y Recursión Taller de Álgebra I Primer Cuatrimestre de 2015 Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas) [1] :: [Integer] [1, 2] :: [Integer]

Más detalles

Tema 9: Declaraciones de tipos y clases

Tema 9: Declaraciones de tipos y clases Tema 9: Declaraciones de tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 41 Tema 9:

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Tema 4: Definición de funciones Informática (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 30 Tema 4: Definición

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Constantes como patrones Variables como

Más detalles

Tema 9: Declaraciones de tipos y clases

Tema 9: Declaraciones de tipos y clases Tema 9: Declaraciones de tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Más detalles

Tema 2: Introducción a Haskell

Tema 2: Introducción a Haskell El Lenguaje Haskell Tema 2: Introducción a Haskell A. Chávez-González 1 A. Riscos-Núñez 1 F. Sancho-Caparrini 1 1 Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla

Más detalles

Programación Funcional en Haskell

Programación Funcional en Haskell Programación Funcional en Haskell Paradigmas de Lenguajes de Programación 1 cuatrimestre 2006 1. Expresiones, valores y tipos Un programa en lenguaje funcional consiste en definir expresiones que computan

Más detalles

Metodologías de Programación II Introducción a OCaml

Metodologías de Programación II Introducción a OCaml Metodologías de Programación II Introducción a OCaml Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL María Alpuente y María José Ramírez 1 LENGUAJES Y PARADIGMAS: INTRODUCCIÓN 1. Indica cuál de las siguientes

Más detalles

Tema 6: Funciones recursivas

Tema 6: Funciones recursivas Tema 6: Funciones recursivas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 6: Funciones

Más detalles

Programación declarativa ( )

Programación declarativa ( ) 1 / 132 Programación declarativa (2008 09) Tema 3: Estructuras de datos José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018 Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2018 FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2) = 3 Enumeración f(x)

Más detalles

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la

Más detalles

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Temario 1 Introducción y semántica operacional 2 Tipos predefinidos 3 Patrones y Definiciones de Funciones 4 Funciones

Más detalles

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017 Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)

Más detalles

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga Programación Declarativa Haskell Informática Sistemas Curso 2008-2009 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc :: Float Float inc x = x

Más detalles

Ejercicios de programación funcional con Haskell

Ejercicios de programación funcional con Haskell Ejercicios de programación funcional con Haskell José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 8 de

Más detalles

Isabelle como un lenguaje funcional

Isabelle como un lenguaje funcional Capítulo 1 Isabelle como un lenguaje funcional 1.1 Introducción Nota 1.1.1. Esta notas son una introducción a la demostración asistida utilizando el sistema Isabelle/HOL/Isar. La versión de Isabelle utilizada

Más detalles

Tipos paramétricos y recursivos

Tipos paramétricos y recursivos Tipos paramétricos y recursivos Taller de Álgebra I Verano 2017 Tipos paramétricos Tipos paramétricos Podemos hacer que los constructores de un tipo de datos reciban parámetros. A los tipos construidos

Más detalles

Programación Funcional Haskell Clase 22

Programación Funcional Haskell Clase 22 Programación Funcional Haskell Clase 22 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 22 p.1/?? Temas de la clase Tipos Numéricos de Haskell Tipos

Más detalles

Práctica 1. Programación Funcional Introducción a Helium

Práctica 1. Programación Funcional Introducción a Helium Práctica 1. Programación Funcional Introducción a Helium Who? Lenguajes y Paradigmas de Programación Objetivo de la práctica Presentar las facilidades básicas del entorno de programación Helium Presentar

Más detalles

Tipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR

Tipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Tipos y Estructuras de Control Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Datos: variables y constantes Tipos básicos: entero, real, char, lógico Estructuras de control

Más detalles

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2015 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Lenguajes funcionales: λ-cálculo

Lenguajes funcionales: λ-cálculo Lenguajes funcionales: λ-cálculo λ-cálculo (Church 1933) Cálculo para el estudio formal del comportamiento de las funciones Sintaxis: λ expresiones Reglas de reducción de λ expresiones Método matemático

Más detalles

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5) 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Práctica 1 1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:?

Más detalles

Ejercicios de programación funcional con Haskell

Ejercicios de programación funcional con Haskell Ejercicios de programación funcional con Haskell José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 8 de

Más detalles

Tema 12: Programas interactivos

Tema 12: Programas interactivos Tema 12: Programas interactivos Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 12:

Más detalles

21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo.

21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo. Variables y Constantes Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Los datos de un programa están representados por variables

Más detalles

Guía 1: Funciones, precedencia y tipado

Guía 1: Funciones, precedencia y tipado Introducción a los Algoritmos - do. cuatrimestre 014 Guía 1: Funciones, precedencia y tipado Docentes: Walter Alini, Luciana Benotti El objetivo de los siguientes ejercicios es introducirnos en la programación

Más detalles

Lenguajes de Programación Programación funcional

Lenguajes de Programación Programación funcional Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una

Más detalles

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Pedro A. Góngora Luna 1 1. Tipos de datos básicos Para iniciar el intérprete utilizamos el comando sml en el shell de windows o unix:

Más detalles

Tema 7. El sistema de clases

Tema 7. El sistema de clases Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 7. El sistema de clases 7.1 Funciones Sobrecargadas Clases e Instancias 7.2 Algunas Clases

Más detalles

Tema 5: Definiciones de listas por comprensión

Tema 5: Definiciones de listas por comprensión Tema 5: Definiciones de listas por comprensión Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Más detalles

Para entender la recursividad primero tenemos que entender la recursividad

Para entender la recursividad primero tenemos que entender la recursividad Para entender la recursividad primero tenemos que entender la recursividad Funcional Clase 1 Matias Reparaz, Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 20 de Septiembre

Más detalles

Tema 5: Definiciones de listas por comprensión

Tema 5: Definiciones de listas por comprensión Tema 5: Definiciones de listas por comprensión Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Más detalles

Guardas y Tipos de datos

Guardas y Tipos de datos Guardas y Tipos de datos Taller de Álgebra I 1er Cuatrimestre 2017 Definiciones de funciones por casos Podemos usar guardas para definir funciones por casos: f (n) = { 1 si n = 0 0 si no f n n == 0 = 1

Más detalles

Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos

Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos Agenda 1. 2. 3. 4. 5. 6. Introducción Aspectos básicos del lenguaje Tipos y clases de tipos

Más detalles

Tipos de datos algebraicos

Tipos de datos algebraicos Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa UNIVERSIDAD DE MÁLAGA Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA Septiembre de 2006 mbre: Especialidad: Prolog Grupo: Ejercicio 1.1 (1 punto) Realizad el árbol

Más detalles

Lenguajes de Programación I

Lenguajes de Programación I Lenguajes de Programación I Tipos de Datos Ernesto Hernández-Novich Copyright c 2006-2010 Tipos de Datos El computador sólo manipula secuencias de bits. Los lenguajes de programación ofrecen

Más detalles

Generación de Código Intermedio

Generación de Código Intermedio Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede

Más detalles

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28 Componentes Básicos InCo InCo Componentes Básicos 1 / 28 Modelo de Computación Vemos al computador como un procesador de datos. +------------+ Entrada ===> Computador ===> Salida +------------+ InCo Componentes

Más detalles

Laboratorio Análisis Lógico Práctica 1

Laboratorio Análisis Lógico Práctica 1 Laboratorio Análisis Lógico Práctica 1 Pedro Arturo Góngora Luna 1 1 Introducción 1.1 Haskell y la programación funcional En la década de los 30 s, Alonzo Church desarrolló un lenguaje formal llamado cálculo

Más detalles

Lógica y Programación

Lógica y Programación Lógica y Programación Programación funcional con Haskell Antonia M. Chávez, Carmen Graciani, Agustín Riscos Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Programación

Más detalles

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa UNIVERSIDAD DE MÁLAGA Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA 17 de Febrero de 2005 Alumno: Grupo: Prolog Ejercicio 1 (a)(2 pts.) Realiza el árbol de búsqueda

Más detalles

Definiciones de tipo. Sinónimos de tipo

Definiciones de tipo. Sinónimos de tipo Capítulo 4. Definiciones de tipo 40 Definiciones de tipo Sinónimos de tipo Un sinónimo de tipo renombra un tipo existente. El nuevo nombre y el antiguo son totalmente intercambiables. type Entero =Integer

Más detalles

Programación Funcional Haskell Clase 21

Programación Funcional Haskell Clase 21 Programación Funcional Haskell Clase 21 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 21 p.1/12 Temas de la clase Clase Anterior En Haskell cada expresión

Más detalles

Programación funcional

Programación funcional Programación funcional Inferencia de tipos manual para programas Haskell J. Sánchez Hernández Enero de 2007 El sistema de tipos de Haskell Es una variante del propuesto R. Milner en 1978 (con antecedentes

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2016 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es continuar aprendiendo programación funcional, es decir,

Más detalles

Exámenes de Programación funcional con Haskell ( )

Exámenes de Programación funcional con Haskell ( ) Exámenes de Programación funcional con Haskell (2009 2014) José A. Alonso (coord.) y Gonzalo Aranda, Antonia M. Chávez, Andrés Cordón, María J. Hidalgo, Francisco J. Martín Miguel A. Martínez, Ignacio

Más detalles

Introducción a la programación. Cecilia Manzino

Introducción a la programación. Cecilia Manzino Paradigmas Un paradigma es un modelo o patrón en cualquier disciplina científica. Un paradigma de programación representa un estilo de programación en cual se escriben soluciones a problemas en términos

Más detalles

Tema 1. Tema 2. Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga

Tema 1. Tema 2. Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga Informática Pepe Gallardo Universidad de Málaga 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc

Más detalles

Introducción a la Programación Genérica

Introducción a la Programación Genérica Introducción a la Programación Genérica Alberto Pardo Instituto de Computación Facultad de Ingeniería Universidad de la República http://www.fing.edu.uy/inco/cursos/proggen Objetivo del curso Introducción

Más detalles

Programación Funcional Haskell Clase 19

Programación Funcional Haskell Clase 19 Programación Funcional Haskell Clase 19 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 19 p.1/23 Temas de la clase Lenguajes Funcionales Haskell y

Más detalles

Tema 3. Tipos de datos simples

Tema 3. Tipos de datos simples Tema 3. Tipos de datos simples Contenido del tema: Concepto de tipo. Tipos simples. Operadores. Expresiones. Semántica. Tipos y expresiones en lenguaje C++ Francisco J. Veredas Dpto. Lenguajes y Ciencias

Más detalles

Manos a la obra: Recursión, división y listas

Manos a la obra: Recursión, división y listas Manos a la obra: Recursión, división y listas Taller de Álgebra I Cuatrimestre de verano de 2015 Calentando motores La clase pasada vimos ejemplos de definiciones recursivas. Hoy vamos a continuar con

Más detalles

Apunte Laboratorio ALPI *

Apunte Laboratorio ALPI * Apunte Laboratorio ALPI * Pablo Speciale * Análisis de Lenguaje de Programación I - Universidad Nacional de Rosario 1 2 ÍNDICE GENERAL ÍNDICE GENERAL 3 Índice 1. Conceptos Importantes 4 1.1. Valores...........................................

Más detalles

8 INTRODUCCIÓN AL OBJECTIVE CAML

8 INTRODUCCIÓN AL OBJECTIVE CAML 8 INTRODUCCIÓN AL OBJECTIVE CAML Objective Caml (Ocaml) es un lenguaje de programación funcional tipificado estáticamente, aunque los tipos pueden inferirse en tiempo de ejecución; y con un mecanismos

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Un calculadora avanzada... y algo más!

Un calculadora avanzada... y algo más! INFORMÁTICA, GRUPO D Un calculadora avanzada... y algo más! Vamos a familiarizarnos con el entorno interactivo de Python. Vamos a construir expresiones aritméticas y a guardar los resultados en variables

Más detalles

Lenguajes de Programación. Capítulo 4. Expresiones.

Lenguajes de Programación. Capítulo 4. Expresiones. Lenguajes de Programación. Capítulo 4. Expresiones. Carlos Ureña Almagro Curso 2011-12 Contents 1 Introducción 2 2 Literales 5 2.1 Literales tipos primitivos......................................... 5

Más detalles

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso. Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

GUÍA BÁSICA DE SCHEME v.4

GUÍA BÁSICA DE SCHEME v.4 Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado

Más detalles

Tema 13: Programas interactivos

Tema 13: Programas interactivos Tema 13: Programas interactivos Informática (2015 16) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 38 Tema 13: Programas

Más detalles