Tipos y estructuras de datos en los lenguajes funcionales
|
|
- Rosa María de la Fuente Torres
- hace 7 años
- Vistas:
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
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 detallesTema 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesProgramació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 detallesIntroducció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 detallesIntroducció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 detallesTipos 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 detallesParadigma 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 detallesTema 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 detallesTema 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 detallesTipos 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 detallesIntroducció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 detallesAlgoritmos 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 detalles1.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 detallesTema 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 detallesTipos 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 detallesTema 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 detallesIntroducció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 detallesPattern 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 detallesTema 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 detallesTema 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 detallesTema 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 detallesLó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 detallesProcesadores 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 detallesIsabelle 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 detallesGuardas 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 detallesParte 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 detallesTema 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 detallesTema 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 detallesProgramació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 detallesGuí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 detallesTipos 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 detallesDefiniciones 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 detallesPara 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 detallesAplicació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 detallesTema 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 detallesTema 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 detallesTema 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 detallesJava. 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 detallesNú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 detallesInformá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 detallesProgramació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 detallesVARIABLES, 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 detallesGuí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 detallesCompiladores: 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 detallesn! = 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 detalles4. 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:
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 detallesApunte 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 detallesTema Á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 detallesListas 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 detallesUnidad 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 detallesIII. 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 detallesUnidad 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 detallesTipos 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 detallesProgramació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 detallesEJERCICIOS 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 detallesProgramació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 detallesAná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 detallesTipos 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 detallesFundamentos 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 detallesGUÍ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 detallesTema 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 detallesGuí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 detallesINTRODUCCIÓ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 detallesComponentes 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 detallesDatos 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 detallesProgramació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 detallesANÁ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 detallesConstrucciones 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 detallesPrá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 detallesTEMA 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 detallesProgramació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 detallesAsumiremos 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 detallesALPII 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 detallesExpresiones 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 detallesIntroducció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 detallesUnidad 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 detallesabril 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 detallesDatos 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 detallesGENERACIÓ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 detallesTema 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 detallesUNIDAD 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 detallesLenguaje 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 detallesElementos 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 detallesLenguajes 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 detallesCurso 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 detallesMetodologí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 detallesUnidad 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 detallesDocente: 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 detallesTema 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 detallesCentro 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 detallesProgramació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 detallesIntroducció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 detallesEstructura 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 detallesTema 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