Tipos y estructuras de datos en los lenguajes funcionales

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

Download "Tipos y estructuras de datos en los lenguajes funcionales"

Transcripción

1 Tipos y estructuras de datos en los lenguajes funcionales Salvador Lucas Alba Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia

2 Objetivos Introducir los tipos de datos como componente fundamental del estilo funcional Introducir los mecanismos de estructuración y abstracción de datos en los lenguajes funcionales Presentar los tipos y estructuras de datos usuales en los lenguajes funcionales

3 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

4 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

5 Tipos Motivación Evitar o detectar errores de programación Un tipo caracteriza el conjunto de valores que las expresiones de ese tipo pueden tener Ayudar a estructurar la información Los tipos pueden verse como colecciones de valores que comparten ciertas propiedades Ayudar a manejar estructuras de datos Los tipos indican cómo utilizar las estructuras de datos que comparten el mismo tipo

6 Tipos Lenguajes tipificados Un tipo representa el conjunto de valores que puede adoptar una variable o expresión En los lenguajes tipificados, las variables adoptan un tipo (ej. Pascal, Haskell) Los lenguajes que no restringen el rango de valores que pueden adoptar las variables son no tipificados (ej. Lisp, Prolog)

7 Tipos Lenguajes tipificados En los lenguajes funcionales modernos todas las expresiones (y subexpresiones) tienen un tipo

8 Tipos Lenguajes tipificados Los lenguajes tipificados incorporan un sistema de tipos que determina si los programas son legales Los sistemas de tipos se utilizan para determinar si los programas tienen un comportamiento adecuado Errores manifiestos 1/0 Errores ocultos Limites Limites vector vector

9 Tipos Lenguajes tipificados Un lenguaje de programación es seguro (safe) si no son posibles errores ocultos Los lenguajes pueden garantizar la seguridad mediante comprobaciones estáticas (static check, ej. ML, Haskell), o dinámicas (dynamic check, ej. Lisp) Compilación Ejecución

10 Tipos Lenguajes tipificados En algunos lenguajes tipificados, la simple comprobación estática de tipos puede hacerlos seguros (ej. ML, Haskell) En otros casos, esto no es así (ej. Pascal, C)

11 Tipos Lenguajes tipificados El sistema de tipos de los lenguajes funcionales modernos garantiza la escritura de programas seguros

12 Tipos Lenguajes tipificados En los lenguajes con tipificación explícita, los tipos forman parte de la sintaxis En los lenguajes con tipificación implícita, los tipos no forman parte de la sintaxis Lenguajes tipificados = Expresiones de programa + Sistema de tipos

13 Tipos Lenguajes tipificados El sistema de tipos de los lenguajes funcionales modernos permite la tipificación implícita (debido a la posibilidad de inferencia de tipos)

14 Sistemas de tipos Sistemas de tipos Expresiones de tipo Los tipos se describen mediante un lenguaje de expresiones de tipo: Tipos básicos o primitivos: Bool, Char, Int,... Variables de tipo: a, b, c,... Constructores de tipo:,, [ ],... Reglas de construcción de las expresiones: τ ::= Bool Char Int t τ τ τ τ [ τ ]

15 Tipos monomórficos Tipos polimórficos Variable de tipo Ejemplos: Tipos Expresiones de tipo Tipos básicos Bool, es el tipo de los valores booleanos True y False Int -> Int, es el tipo de la función fact, que devuelve el factorial de un número [a] -> Int, es el tipo de la función length, que obtienen la longitud de una lista constituida por elementos de cualquier tipo Constructores de tipo

16 Sistemas de tipos Sistemas de tipos Asertos Los sistemas de tipos permiten razonar sobre tipos y asociar expresiones de tipo con expresiones de programa: Tipificación M :: τ (M tiene tipo τ) Equivalencia τ = τ (τ y τ son equivalentes) Subtipo τ<:τ (τ es un subtipo de τ )

17 Sistemas de tipos Sistemas de tipos Sentencias Las sentencias sobre las que se razona en los sistemas de tipos son de la forma: Γ Φ Contexto de tipificación Γ=, x 1 ::τ 1, x 2 ::τ 2,..., x n ::τ n para n 0 Aserto Con variables libres x 1, x 2,..., x n

18 Ejemplo: Sistemas de tipos Sistemas de tipos Sentencias True::Bool El tipo de True es Bool, x::int x+1::int El tipo de x+1 es Int si el tipo de x es Int

19 Sistemas de tipos Sistemas de tipos Sistema formal Las reglas del sistema de tipos tienen la forma general: (Nombre) Γ 1 Φ 1... (condiciones) Γ n Φ n Γ Φ

20 Ejemplo: Sistemas de tipos Sistemas de tipos Sistema formal (Env ) El contexto de tipificación vacío siempre es válido

21 Sistemas de tipos Sistemas de tipos Sistema formal Ejemplo (reglas de tipificación): (Val n) Γ (n=0, ±1, ±2...) Γ n::int El tipo de un valor entero es Int en cualquier contexto de tipificación válido

22 Sistemas de tipos Sistemas de tipos Sistema formal Ejemplo (reglas de tipificación): (Val +) Γ M::Int Γ M+N::Int Γ N::Int Si las expresiones M y N son de tipo entero en Γ, también M+N lo es

23 Tipos Lenguajes tipificados Un sistema de tipos es un conjunto de reglas de tipo

24 Sistemas de tipos Sistemas de tipos Sistema formal Una derivación en un sistema de tipos es un árbol (invertido) de sentencias Cada una se obtiene de las inmediatamente superiores por aplicación de una regla Una sentencia válida es la que se puede obtener como raíz de una derivación

25 Ejemplo: Sistemas de tipos Sistemas de tipos Sistema formal (por Env ) (por Env ) 1::Int 2::Int (por Val n) (por Val n) 1+2::Int (por Val +)

26 Sistemas de tipos Sistemas de tipos Problemas de tipificación Dos problemas fundamentales sobre tipificación de expresiones de programa: Comprobación de tipos (type checking): Dados M, Γ y τ, comprobar si Γ M :: τ es válida Inferencia de tipos (type inference o type deduction): Dada M, obtener, en su caso, Γ y τ de forma que Γ M :: τ sea válida

27 Sistemas de tipos Sistemas de tipos Problemas de tipificación En ambos casos, es esencial disponer de algoritmos para realizar dichas tareas: Algoritmo de comprobación de tipos (typechecking algorithm) Algoritmo de inferencia de tipos (type inference algorithm) La existencia y eficacia de éstos depende mucho del sistema de tipos

28 Sistemas de tipos Sistemas de tipos Problemas de tipificación Haskell utiliza el sistema de tipos (polimórficos) de Hindley-Milner que admite comprobación de tipos (Mycroft) e inferencia de tipos (Milner)

29 Sistemas de tipos Sistemas de tipos Problemas de tipificación El sistema de tipos de Hindley-Milner tiene sus limitaciones: la función selfapplication f = f f no admite ningún tipo dentro de este sistema

30 Sistemas de tipos Sistemas de tipos Problemas de tipificación Ejemplo: Dadas las ecuaciones fun f lista1 lista1 = f lista1 + f lista2 imposible = fun length [1,2,3] abc la expresión imposible no admite ningún tipo dentro de este sistema

31 Sistemas de tipos Sistemas de tipos Problemas de tipificación La elección de un sistema de tipos puede limitar la expresividad del lenguaje

32 Sistemas de tipos Sistemas de tipos Problemas de tipificación Los algoritmos de comprobación de tipos (Mycroft) e inferencia de tipos (Milner) no son totalmente equivalentes

33 Sistemas de tipos Sistemas de tipos Problemas de tipificación Ejemplo: consideremos la ecuación g x = 1:g (g c ) El algoritmo de Milner falla al tratar de encontrar el tipo de g. Especificando g :: a -> [Int] el intérprete (que utiliza el algoritmo de Mycroft en ese caso) acepta la definición

34 Sistemas de tipos Sistemas de tipos Problemas de tipificación Ejemplo: consideremos la ecuación g x = g 1 El algoritmo de Milner infiere el tipo g :: Num a => a -> b mientras que el algoritmo de Mycroft acepta la tipificación explícita (más general) g :: a -> b

35 Sistemas de tipos Sistemas de tipos Problemas de tipificación A pesar de la posibilidad de tipificación implícita, a veces es recomendable dar los tipos de las funciones explícitamente

36 Polimorfismo Polimorfismo paramétrico Los tipos en cuya expresión de tipo no aparecen variables de tipo se denominan monotipos o tipos monomórficos Los tipos en cuya expresión de tipo aparecen variables se denominan politipos o tipos polimórficos (polimorfismo paramétrico) Un tipo polimórfico representa un número infinito de monotipos

37 Polimorfismo Polimorfismo paramétrico Ejemplo: la función length :: [a] -> Int puede verse como una función con infinitos monotipos [Int] -> Int, [Bool] -> Int, [Int -> Int] -> Int,...

38 Polimorfismo Polimorfismo paramétrico Ejemplo: La implementación de length :: [a] -> Int es única: length [ ] = 0 length (x:xs) = 1+length xs y resulta válida para todos los usos de la función

39 Polimorfismo Polimorfismo paramétrico Con un sistema de tipos polimórficos, el algoritmo de inferencia de tipos intenta obtener el tipo principal de las expresiones El tipo principal es el tipo más general capaz de capturar todos los usos válidos de la expresión

40 Polimorfismo Polimorfismo paramétrico El sistema de tipos de Hindley-Milner asegura que toda expresión tipificable tiene un tipo principal único

41 Polimorfismo Sobrecarga A veces nos interesa sobrecargar el uso de ciertos operadores, aplicándolos sobre argumentos de distintos tipos, aunque de forma limitada Otras veces, no tiene sentido asignar un politipo a un operador si no podemos implementar todas sus concreciones

42 Polimorfismo Sobrecarga Este tipo de polimorfismo se denomina polimorfismo ad-hoc o sobrecarga (overloading)

43 Polimorfismo Sobrecarga Ejemplo: los operadores aritméticos (+), (-), (*), (/),..., suelen estar sobrecargados: (+) :: Int -> Int -> Int (+) :: Float -> Float -> Float (+) :: Complex -> Complex -> Complex corresponden a distintos usos de (+). Otro: (+) :: Int -> Float -> Float

44 Polimorfismo Sobrecarga El operador (+) no puede recibir el politipo (+) :: a -> a -> a porque implicaría dotar de significado a la suma de caracteres, funciones, listas, etc., lo cual puede interesarnos o no

45 Polimorfismo Sobrecarga Ejemplo: El operador de igualdad (==), aun teniendo una semántica bien definida, no es implementable en algunos casos. Cómo determinar (efectivamente) si dos funciones son iguales?

46 Polimorfismo Sobrecarga Matemáticamente: sean f : D E y g : D E dos funciones. Tenemos que f = D E g si y sólo si x D, f(x)= E f(x) Si D es infinito, o f no es computable, = D E puede no ser decidible

47 Polimorfismo Sobrecarga El operador (==) no puede recibir el politipo (==) :: a -> a -> Bool porque tendríamos que implementar la comprobación de igualdad para todos los tipos; en particular para las funciones: (==) :: (a->b) -> (a->b) -> Bool

48 Polimorfismo Sobrecarga En Haskell, el polimorfismo ad-hoc se implementa mediante el concepto de clase

49 Polimorfismo Sobrecarga Una clase es una colección de tipos Todos los tipos pertenecientes a una clase deben tener definidas ciertas operaciones

50 Ejemplo: Polimorfismo Sobrecarga Los miembros de la clase Eq deben definir las operaciones (==) y (/=) para comprobar si dos elementos son iguales o distintos Los miembros de la clase Ord deben tener definidas, además de (==) y (/=), las relaciones (<) y (<=) para comparar elementos entre sí

51 Polimorfismo Sobrecarga class Eq a where -- simplificado (==), (/=) :: a -> a -> Bool class Eq a => Ord a where -- simplificado (<), (<=), (>), (>=) :: a -> a -> Bool Ord es una subclase de Eq

52 Polimorfismo Sobrecarga De acuerdo con la declaración anterior, el tipo (sobrecargado) de (==) es (==) :: Eq a => a -> a -> Bool que se interpreta como sigue: si a es un tipo de la clase Eq, el tipo de (==) es a -> a -> Bool

53 Polimorfismo Sobrecarga Algunas clases predefinidas de Haskell son: Eq: tipos con comprobación de igualdad Ord: tipos con operadores de comparación Enum: tipos cuyos valores son secuenciables Show: tipos cuyos valores son convertibles en cadenas de caracteres Num, Integral, Fractional, Real, Floating, RealFrac, RealFloat: clases numéricas

54 Polimorfismo Sobrecarga Es posible añadir nuevos tipos a una clase, si particularizamos las operaciones propias de ésta para los valores del nuevo tipo

55 Polimorfismo Sobrecarga Ejemplo: consideremos el tipo data Nat = Cero S Nat deriving Show Podemos añadirlo a la clase Eq: instance Eq Nat where Cero== Cero = True S n == S m = m == n _ == _ = False

56 Polimorfismo Sobrecarga Ejemplo: En realidad, bastaría con escribir data Nat = Cero S Nat deriving (Eq, Show)

57 Polimorfismo Sobrecarga La clase Num se define como class (Eq a, Show a) => Num a where (+),(-),(*) :: a -> a -> a Simplificado!!

58 Polimorfismo Sobrecarga Podemos añadir el tipo Nat a la clase Num: instance Num Nat where Cero + n = n (S n) + m = S (n+m) Cero * n = Cero (S n) * m = m + (n*m) No es preciso definir todas las operaciones ( pero no se podrán usar!!)

59 Polimorfismo Sobrecarga Ahora podríamos escribir, directamente: fact Cero = S Cero fact (S n) = (S n) * fact n Sobrecargado!!

60 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

61 Tipos básicos Tipos básicos Los tipos básicos proporcionados por Haskell son: Booleanos Caracteres Tuplas Cadenas Tipos numéricos

62 Tipos básicos Booleanos Los valores del tipo Bool son True y False El tipo Bool pertenece a las clases Bounded, Enum, Eq, Ord y Show, entre otras

63 Tipos básicos Booleanos El perfil de la clase Enum es: class Enum a where succ,pred :: a -> a toenum :: Int -> a fromenum :: a -> Int Simplificado!!

64 Tipos básicos Booleanos Operaciones usuales para Bool (en Haskell): Conjunción:&& :: Bool -> Bool -> Bool Disyunción: :: Bool -> Bool -> Bool Negación: not :: Bool -> Bool

65 Tipos básicos Caracteres Los valores del tipo Char son los caracteres: a, b,..., A, B,..., 1, 2,... \a, \b, \f, \n, \r,... \BEL, \BS, \FF, \LF, \CR,... \7, \8, \12, \10, \13,... \o7, \o10, \o14, \o12, \o15 \x7, \x8, \xc, \xa, \xd,...

66 Tipos básicos Caracteres El tipo Char pertenece a Bounded, Enum, Eq, Ord y Show Operaciones usuales para Char: isalpha, isalphanum, isascii, isdigit, islower, isprint, isupper :: Char -> Bool tolower, toupper :: Char -> Char chr :: Int -> Char -- toenum ord :: Char -> Int -- fromenum

67 Tipos básicos Tuplas El tipo polimórfico (a,b) (en general, (a 1,..., a n ) ) permite agrupar valores procedentes de tipos distintos: (True,False) :: (Bool,Bool) (True, a ) :: (Bool,Char) ((True,False), a ) :: ((Bool,Bool),Char) (isdigit, a,1) :: (Char -> Bool, Char,Int)

68 Tipos básicos Tuplas El tipo tupla pertenece a las clases Eq, Ord, Show y Enum, entre otras Operaciones usuales sobre tuplas: Proyección izq: fst :: (a,b) -> a Proyección der: snd :: (a,b) -> b Sólo con pares!!

69 Tipos básicos Cadenas Los valores del tipo String son las cadenas de caracteres:, 1&bA, Esta frase \10ocupa dos lineas En realidad, String es un tipo sinónimo: type String = [Char]

70 Tipos básicos Cadenas El tipo String pertenece a las clases Eq, Ord y Show, entre otras

71 Tipos numéricos Números en Haskell Los tipos numéricos en Haskell son: Int, Integer: Números enteros Float, Double: Números reales Ratio: Números racionales Complex: Números complejos Preludio Estándar Librerías

72 Tipos numéricos Números enteros Los valores del tipo Int son los enteros de rango acotado: 0, 45, -3452, El límite es maxbound::int El tipo Int pertenece a la clase Bounded class Bounded a where minbound :: a maxbound :: a

73 Tipos numéricos Números enteros El tipo Int también pertenece a las clases Enum, Eq, Ord y Show, además de a las clases numéricas Num, Real e Integral

74 Tipos numéricos Tipos numéricos Números enteros class (Eq a, Show a) => Num a where (+),(-),(*) :: a -> a -> a negate :: a -> a abs,signum :: a -> a frominteger :: Integer -> a

75 Tipos numéricos Tipos numéricos Números enteros class (Num a, Ord a) => Real a where torational :: a -> Rational class (Real a, Enum a) => Integral a where quot,rem,div,mod :: a -> a -> a quotrem, divmod :: a -> a -> (a,a) tointeger :: a -> Integer

76 Tipos numéricos Números enteros Los valores del tipo Integer son los enteros de rango arbitrario La aritmética con Integer es más precisa que con Int, pero más costosa

77 Tipos numéricos Números enteros El tipo Integer pertenece a las clases Enum, Eq, Ord y Show (pero no a Bounded), además de a las clases numéricas Num, Real e Integral

78 Tipos numéricos Tipos numéricos Números reales Los valores del tipo Float son los números en coma flotante de precisión simple: , , , e7, 231.6e-2, e03

79 Tipos numéricos Tipos numéricos Números reales El tipo Float pertenece a las clases Enum, Eq, Ord y Show (no a Bounded), además de a las clases numéricas Num, Real, Fractional, Floating, RealFrac y RealFloat

80 Tipos numéricos Tipos numéricos Números reales class (Num a) => Fractional a where (/) :: a -> a -> a recip :: a -> a fromrational :: Rational -> a

81 Tipos numéricos Tipos numéricos Números reales class (Fractional a) => Floating a where pi :: a exp,log,sqrt :: a -> a (**),logbase :: a -> a -> a sin,cos,tan, asin,acos,atan, sinh,cosh,tanh, asinh,acosh,atanh :: a -> a

82 Tipos numéricos Tipos numéricos Números reales class (Real a,fractional a) => RealFrac a where properfraction :: (Integral b) => a -> (b,a) truncate,round :: (Integral b) => a -> b ceiling,floor :: (Integral b) => a -> b

83 Tipos numéricos Tipos numéricos Números reales class (RealFrac a,floating a) => RealFloat a where floatradix :: a -> Integer floatdigits :: a -> Int floatrange :: a -> (Int,Int) decodefloat :: a -> (Integer,Int) encodefloat :: Integer -> Int -> a

84 Tipos numéricos Tipos numéricos Números reales class (RealFrac a,floating a) => RealFloat a where -- Continuación exponent :: a -> Int significand :: a -> a scalefloat :: Int -> a -> a isnan,isinfinite:: a -> Bool isdenormalized:: a -> Bool isieee :: a -> Bool

85 Tipos numéricos Tipos numéricos Números reales Otras operaciones de interés son: (^) :: (Integral b, Num a) => a -> b -> a Potencia con exponente entero (^^) :: (Integral b, Fractional a) => a -> b -> a Potencia con exponente racional

86 Tipos numéricos Tipos numéricos Números reales Los valores del tipo Double son los números en coma flotante de precisión doble El tipo Double pertenece a las mismas clases que Float

87 Tipos numéricos Tipos numéricos Números racionales y complejos Los tipos Ratio y Rational, para trabajar con números racionales, se definen en la librería Ratio de Haskell 98 El tipo Complex, para trabajar con números complejos, se definen en la librería Complex de Haskell 98 La librería Numeric de Haskell 98 describe funciones numéricas adicionales

88 Tipos numéricos Tipos numéricos Num Int,Integer,Float,Double Real Int,Integer,Float,Double Fractional Float,Double Integral Int,Integer RealFrac Float,Double Floating Float,Double RealFloat Float,Double

89 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

90 Tipos Tipos algebraicos Los tipos algebraicos se definen junto con los valores que éstos contienen Ejemplos: data Color = Red Green Blue data Laboral = Lu Ma Mi Ju Vi data TreeInt = L Int B TreeInt TreeInt data Tree t = L t B (Tree t) (Tree t)

91 Tipos Tipos algebraicos Lostipos algebraicos se definen junto con los valores que éstos contienen Ejemplos: datacolor = Red Green Blue datalaboral = Lu Ma Mi Ju Vi datatreeint = L Int B TreeInt TreeInt datatree t = L t B (Tree t) (Tree t) Constructores de tipos

92 Tipos Tipos algebraicos Los tipos algebraicos se definen junto con los valores que éstos contienen Ejemplos: Simples Estructurados data Color = Red Green Blue data Laboral = Lu Ma Mi Ju Vi data TreeInt = L Int B TreeInt TreeInt data Tree t = L t B (Tree t) (Tree t) Constructores de datos

93 Tipos Tipos algebraicos Los tipos algebraicos se definen junto con los valores que éstos contienen Ejemplos: data Color = Red Green Blue data Laboral = Lu Ma Mi Ju Vi data TreeInt = L Int B TreeInt TreeInt data Tree t = L t B (Tree t) (Tree t) Polimórfico Variables de tipo

94 Tipos Tipos algebraicos Los valores se obtienen considerando la definición de tipo como una gramática: Los constructores de datos son símbolos terminales Los constructores de tipo son símbolos no terminales Los valores del tipo son los términos del lenguaje generado por la gramática

95 Tipos Tipos algebraicos Ejemplo: Int := TreeInt := L Int B TreeInt TreeInt Valores de este tipo son: L 1, L -10, B (L 1) (L 10), B (B (L 1) (L1)) (L -1)

96 Tipos Tipos algebraicos Ejemplo de valor del tipo TreeInt (B (L 1) (B (B (L 2) (L 3)) (L 4)))

97 Tipos Tipos algebraicos Las siguientes expresiones: L (1+1) B (B (L 1) (L (length ab ))) (L (fact 2)) son del tipo TreeInt, pero no son valores (contienen símbolos no constructores)

98 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

99 Tipos funcionales Tipos funcionales Los tipos funcionales (que involucran el constructor de tipo ) son muy importantes en programación funcional Ejemplo: Int -> Int a -> Bool Num a => a -> a -> a (a -> b) -> [a] -> [b]

100 Tipos funcionales Tipos funcionales Valores funcionales Los valores funcionales pueden especificarse de dos formas: explícitamente: mediante expresiones lambda implícitamente: mediante ecuaciones

101 Definición de funciones Definición de funciones Expresiones lambda Una función f se describe mediante una expresión lambda de la forma \x 1 x k -> e Las variables x 1,..., x k son distintas entre sí y las únicas que aparecen en la expresión e

102 Ejemplo Definición de funciones Definición de funciones Expresiones lambda \x y -> x+y \x-> 2*x \x-> True \ m n -> B (L m) (L n)

103 Definición de funciones Definición de funciones Expresiones lambda La definición de funciones recursivas es problemática ( aunque no imposible!)

104 Definición de funciones Definición de funciones Ecuaciones En los lenguajes funcionales, lo normal es definir las funciones mediante ecuaciones empleando (y combinando) distintas técnicas: parámetros formales guardas ajuste de patrones distinción de casos cláusulas where

105 Definición de funciones Definición de funciones Parámetros formales Una función f se describe mediante ecuaciones de la forma: f x 1 x k = r Las variables x 1,..., x k son distintas entre sí y las únicas que aparecen en la parte derecha r

106 Definición de funciones Definición de funciones Ejemplos: Parámetros formales doble x = x+x triple x = 3*x seisveces x = doble (triple x) fact n = if n==0 then 1 else n*fact (n-1)

107 Definición de funciones Definición de funciones Ejemplos: Parámetros formales doble x = x + x triple x = 3 * x Funciones primitivas

108 Definición de funciones Definición de funciones Ejemplos: Parámetros formales doble x = x+x triple x = 3*x seisveces x = doble (triple x) Otras funciones de usuario

109 Definición de funciones Definición de funciones Ejemplos: Parámetros formales doble x = x+x triple x = 3*x seisveces x = doble (triple x) fact n = if n==0 then 1 else n*fact (n-1) Recursividad

110 Definición de funciones Definición de funciones Parámetros formales y guardas Una función f se describe mediante ecuaciones de la forma: f x 1 x k c = r donde c es una expresión booleana

111 Definición de funciones Definición de funciones Parámetros formales y guardas Ejemplos: fact n n==0 = 1 n>0 = n*fact (n-1) sign x x<0 = neg x==0 = cero x>0 = pos

112 Definición de funciones Definición de funciones Parámetros formales y guardas Ejemplos: fact n n==0 = 1 n>0 = n*fact (n-1) sign x x<0 = neg x==0 = cero x>0 = pos Guardas

113 Definición de funciones Definición de funciones Ajuste de patrones Una función f se describe mediante ecuaciones de la forma: f p 1 p k = r Los patrones p 1,..., p k son términos constituidos por constructores de datos y variables

114 Definición de funciones Definición de funciones Ejemplos: Ajuste de patrones length [] = 0 length (x:xs) = 1+length xs data Nat = Cero S Nat first Cero _ = [] first (S n) (x:xs) = x:(first n xs)

115 Definición de funciones Definición de funciones Ejemplos: Ajuste de patrones length [] = 0 length (x:xs) = 1+length xs data Nat = Cero S Nat Patrones first Cero _ = [] first (S n) (x:xs) = x:(first n xs) Patrones

116 Definición de funciones Definición de funciones Ajuste de patrones Una expresión e se ajusta a un patrón p (pattern matching) si e puede verse como una concreción de p (dando ciertos valores a las variables libres de p)

117 Definición de funciones Definición de funciones Ajuste de patrones Ejemplo: la expresión S (S Cero) se ajusta al patrón S x pero no al patrón Cero S (S Cero) S x {x := S Cero} S (S Cero) X Cero

118 Definición de funciones Definición de funciones Ajuste de patrones El ajuste de patrones permite clasificar datos y explorar / recuperar subestructuras de los mismos

119 Definición de funciones Definición de funciones Distinción de casos Una función f se describe mediante ecuaciones de la forma: f p 1 p k = case x of q 1 -> e 1... q n -> e n Donde p 1 p k, q 1 q n son patrones, x es una variable y e 1 e n expresiones

120 Ejemplo: Definición de funciones Definición de funciones Distinción de casos length xs = case xs of [ ] -> 0 (y:ys) -> 1+length ys

121 Definición de funciones Definición de funciones Cláusulas where Una función f se describe mediante ecuaciones de la forma: f p 1 p k = e where l 1 = r 1... l n = r n Donde l 1 l n son patrones o partes izquierdas de definiciones de función, y r 1 r n son expresiones

122 Ejemplo: Definición de funciones Definición de funciones Cláusulas where raicesec2 a b c = ((-b+d)/a,(-b-d)/a ) where d = sqrt(b^2-4*a*c) a = 2*a

123 Orden superior Orden superior Funciones como ciudadanos de primera clase En programación funcional, las funciones son ciudadanos de primera clase (first class citizens):

124 Orden superior Orden superior Funciones como ciudadanos de primera clase En programación funcional, las funciones son ciudadanos de primera clase (first class citizens): Pueden ser pasadas, como argumentos, a otras funciones

125 Orden superior Orden superior Funciones como ciudadanos de primera clase En programación funcional, las funciones son ciudadanos de primera clase (first class citizens): Pueden ser pasadas, como argumentos, a otras funciones Pueden ser devueltas como resultado de una llamada a función

126 Orden superior Orden superior Funciones como ciudadanos de primera clase Ejemplos: map aplica una función f a cada elemento de una lista map f [] = [] map f (x:xs) = (f x):map f xs add x y = x+y add2 = add 2 aplicación parcial add2 añade 2 al número que se le pasa como argumento

127 Orden superior Orden superior Currificación A cada función (sobre k-tuplas) f: D 1 D 2 D k E le corresponde una función f C : D 1 (D 2 ( (D k E) ) que a cada valor de D 1 le asocia una función de k-1 argumentos (y viceversa) f C es la versión currificada de f

128 Ejemplo: Orden superior Orden superior Currificación map :: (a -> b) -> [a] -> [b] if :: Bool -> a -> a -> a + :: Num a => a -> a -> a

129 Orden superior Orden superior Currificación El operador -> es asociativo por la derecha a -> b -> c equivale a a -> (b -> c) y difiere de (a -> b) -> c El operador de aplicación (a veces denotado es asociativo por la izquierda f a b equivale a (f a) b y difiere de f (a b)

130 Currificación En programación funcional ésto facilita la aplicación parcial de una función: si f :: a -> b -> c Entonces, si e::a, escribir f e tiene sentido pleno: se trata de una función f e :: b -> c Orden superior Orden superior

131 Sección Orden superior Orden superior Currificación Ejemplo: la expresión map add2 [1,2] es válida en un lenguaje como Haskell, y sería equivalente a map (add 2) [1,2] o incluso map (+ 2) [1,2]

132 Desarrollo 1. Tipos 2. Tipos básicos y tipos numéricos 3. Tipos algebraicos 4. Tipos funcionales: orden superior, definición de funciones 5. Listas y árboles 6. Tipos abstractos de datos

133 Bibliografía [Car97] L. Cardelli. Type Systems. [PE93] R. Plasmeijer and M. van Eekelen. Functional Programming and Parallel Graph Rewriting. Addison- Wesley, Reading, MA, 1993 [Rea93] C. Reade. Elements of Functional Programming. Addison-Wesley, Reading, MA, 1993

134 λ :=

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 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 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 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

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 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

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

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

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 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

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

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 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

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

Introducción a la programación funcional

Introducción a la programación funcional Introducción a la programación funcional Salvador Lucas Alba Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia http://www.dsic.upv.es/users/elp/slucas.html Objetivos

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

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

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

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 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

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

Pattern matching + Tipos enumerados

Pattern matching + Tipos enumerados Pattern matching + Tipos enumerados Taller de Álgebra I Verano 2017 Pattern matching Pattern matching El pattern matching es un mecanismo que nos permite asociar una definición de una función solo a ciertos

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 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 12: Analizadores sintácticos funcionales

Tema 12: Analizadores sintácticos funcionales Tema 12: Analizadores sintácticos funcionales Informática (2014 15) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 37

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

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

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

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

Parte II: Programación Funcional

Parte II: Programación Funcional Parte II: Programación Funcional Técnicas Básicas de la Programación funcional (usando Haskell) P. Julián-Iranzo Universidad de Castilla-La Mancha Programación Declarativa versión Abril 2014 P. Julián

Más detalles

Tema 11: Analizadores sintácticos funcionales

Tema 11: Analizadores sintácticos funcionales Tema 11: Analizadores sintácticos funcionales 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 8: Tipos de datos. Sesión 24: Tipos de datos (1)

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1) Tema 8: Tipos de datos Sesión 24: Tipos de datos (1) Referencias Programming Languages Pragmatics: Capítulo 7, apartados 7.1 (Type Systems) y 7.2 (Type Checking) Programming in Scala: Capítulo 5 (Basic

Más detalles

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

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

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

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

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

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Aplicación de la Inducción Matemática Programación Funcional Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Motivación Programación Imperativa Declarativa Procedimental Ejemplo:

Más detalles

Tema 3.- Predicados y sentencias condicionales

Tema 3.- Predicados y sentencias condicionales UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER

Más detalles

Tema 6. Definiciones de tipos

Tema 6. Definiciones de tipos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 6. Definiciones de tipos 6.1 Sinónimos de tipo 6.2 Definiciones de tipos de datos Tipos enumerados

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

Java. Introducción a la Programación Orientada a Objetos

Java. Introducción a la Programación Orientada a Objetos Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Universidad Rafael Urdaneta Escuela de Ingeniería de Computación Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Asignación

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

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

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

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

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V. Compiladores: Análisis Semántico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V. Verificaciòn de tipos Se puede hacer en forma Estàtica: en tiempo

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

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva:

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Capítulo 9. Programación con Árboles 107 Árboles Árboles generales Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva: Un

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

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 9. Árboles 9.1 Árboles binarios fmap para árboles binarios Plegado de árboles binarios 9.2

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

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico

Más detalles

III. Generación de Código orientado a objetos

III. Generación de Código orientado a objetos III. Generación de Código orientado a objetos UNIDAD III Aspectos fundamentales Del código orientado a objetos. MÓDULOS DE CÓDIGO 1 DE FORMULARIO Almacenan el código en VB 2 ESTÁNDAR 3 DE CLASE Contiene

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

Tipos de Datos Simples Contenido del Tema

Tipos de Datos Simples Contenido del Tema T E M A 3 Tipos de Datos Simples Contenido del Tema 3.1. Concepto de Tipo 3.1.1. Elementos básicos: atributos y operaciones 3.1.2. Tipos. Concepto y necesidad 3.1.3. Operadores básicos 3.2. Tipos de Datos

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

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

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

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado

Más detalles

Tipos de datos en Haskell

Tipos de datos en Haskell Tipos de datos en Haskell Ejercicios 1. Tipos enumerados Cuando los distintos valores que debemos distinguir en un tipo son finitos, entonces podemos enumerar todos los valores distintos para el tipo.

Más detalles

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;) Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,

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

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

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

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN Métodos Numéricos 2008 - Carlos Zotelo Introducción a Fortran 77 / 90 1. El lenguaje Fortran 77 / 90 2. Tipos de datos básicos 3. Constantes y variables 4. Entrada

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

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

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

ANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS

ANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

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. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. Tema 2. TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL. PARTE : VARIABLES, OPERADORES Y CONSTANTES.. INTRODUCCIÓN AL LENGUAJE C 2. PROGRAMAS BÁSICOS EN LENGUAJE C 3. DATOS EN LENGUAJE C

Más detalles

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1 Tema 3. Información, datos, operaciones y expresiones Programación 1 Tema 3 Información, datos, operaciones y expresiones Índice Datos y tipos de datos Datos primitivos en C++ Expresiones e instrucción de asignación Datos y tipos de datos Problema información

Más detalles

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles.

Asumiremos que se dispone de procedimientos para leer y escribir caracteres. Se desarrollan algunas funciones primitivas que nos serán útiles. 26. Representación de números. Conversiones 26.1. Representación y conversión. Los números son representados internamente, en un computador digital, en sistema binario. Externamente se representan mediante

Más detalles

ALPII Práctica 3. Bernardo García Fuentes

ALPII Práctica 3. Bernardo García Fuentes ALPII Práctica 3 Bernardo García Fuentes 1 Ej. 1................................................................................................. modulus :: [Float] -> Float modulus = sqrt.sum.map square

Más detalles

Expresiones Lógicas y Operadores sobre Bits

Expresiones Lógicas y Operadores sobre Bits Expresiones Lógicas y Operadores sobre Bits Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1 Expresión

Más detalles

Introducción a Java. Introducción a Java. Programación I

Introducción a Java. Introducción a Java. Programación I Introducción a Java Introducción a Java Programación I Como Funciona Tipos de Datos TIPO TAMAÑO RANGO byte 8 bits Valores numéricos de 128 a 127 short 16 bits Valores numéricos de 32.768 a 32.767 int 32

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS A.- ASPECTOS FUNDAMENTALES DEL CÓDIGO ORIENTADO A OBJETOS MÓDULOS DE CÓDIGO: El código en Visual Basic se almacena en módulos. Hay tres tipos de módulos: de formulario,

Más detalles

Tema 2. Tipos y Estructuras Básicas

Tema 2. Tipos y Estructuras Básicas Tema 2. Tipos y Estructuras Básicas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de

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

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados Lenguajes de programación Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Teórica - clase 3 Introducción a la programación imperativa Las computadoras

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

Metodologías de Programación II Introducción

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

Más detalles

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores. Unidad IV Métodos. 4.1 Definición de un método. El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través del mismo

Más detalles

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:

Más detalles

Tema 13: Aplicaciones de programación funcional

Tema 13: Aplicaciones de programación funcional Tema 13: Aplicaciones de programación funcional 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

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

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

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Ampliación de Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Tipos de datos escalares 4. Operadores básicos

Más detalles

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs) Prof. Montserrat Serrano Montero ÍNDICE Tipos de datos El tipo abstracto

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