Introducción. Haskell
|
|
- Samuel Piñeiro Fidalgo
- hace 7 años
- Vistas:
Transcripción
1 Introducción Haskell 1
2 Valores, Tipos, Expresiones Los valores son entidades abstractas que podemos considerar como la respuesta a un cálculo Cada valor tiene asociado un tipo (<valor> :: <tipo>) 2 :: Int Int {...-3,-2,-1,0,1,2,3...} Las expresiones son términos construidos a partir de valores (2*3)+(4-5) La reducción o evaluación de una expresión consiste en aplicar una serie de reglas que transforman la expresión en un valor (2*3)+(4-5) 6+(4-5) 6+(-1)
3 Valores, Tipos, Expresiones (II) Un valor es una expresión irreducible Toda expresión tiene un tipo: el tipo del valor que resulta de reducir la expresión (Sistema Fuertemente Tipado). (2*3)+(4-5) :: Int El tipo de una expresión debe establecerse en tiempo de compilación sin evaluar la expresión (Tipado Estático) El compilador calcula el tipo de una expresión, normalmente, sin ninguna anotación del programador (Inferencia de Tipos) Las funciones también son valores (y por lo tanto tendrán tipo) 3
4 Tipos Básicos Int, subconjunto de los enteros (normalmente, los enteros representables por una palabra del procesador): 2, Integer, enteros (precisión absoluta) Char, caracteres: a, 5, \n, \xf4... Float/Double, números en punto flotante de simple/doble precisión: , 2, 2.5e+2... String, cadenas de caracteres: "hola",... Bool, booleanos: True, False 4
5 Definiciones Asociamos identificador y expresión (<id> = <expr>) x = (2*3)+(4-5) y = x^2 Opcionalmente, podemos incluir una anotación de tipo: x :: Int x = (2*3)+(4-5) A pesar de que son inferidas automáticamente, las anotaciones de tipo se suelen añadir para ciertas definiciones por: Documentación Localización de errores Facilitar optimización (sobrecarga) 5
6 Definición local let...in Definición local: let <id> = <e 1 > in <e 2 > let x = 2*3 in x+1 La definición local es una expresión, cuyo tipo es el de e 2 (let x = 2*3 in x+1) + 5 Semántica: Sustituimos id por su definición e 1 en e 2 let x = 2*3 in x+1 x+1[2*3/x] (2*3)+1 7 Ámbito de la definición let x = 1 in let y = 2 in x+y y x 6
7 Definición local where Definición local: <e 2 > where <id> = <e 1 > x+1 where x = 2*3 Ambigüedad entre let...in y where x where let x = 5 in x*x x let...in where x = 6 Se permite definir múltiples identificadores simultáneamente: let x = 5 x+y where x = 5 y = 6 y = 6 in x+y 7
8 Regla del Contexto Las declaraciones de una definición local, se delimitan con llaves ({}), y punto y coma (;) a+b where { a=5; b=4 } Opcionalmente, podemos usar el contexto como delimitador a+b where a=5 b=4 El contexto se puede usar en cualquier lista de declaraciones de let..in, where, y case let y = 7 x = y where y = 8 z = 2 in y+x+z z = 4 8
9 Expresión Condicional Expresión Condicional: if <e 1 > then <e 2 > else <e 3 > Semántica: if 2+3==5 then "ho. el se "la" Si e 1 True entonces if... e 2 Si e 1 False entonces if... e 3 if 2+3==5 then ho else la ho La guardia de la expresión condicional debe ser de tipo Bool Las ramas then y else deben tener igual tipo El tipo de la expresión condicional es el tipo de la rama then 9
10 Funciones Función matemática: Transparencia Referencial (f x = f x) Definición: <función> <argumento> = <expresión> sucesor x = x+1 cuadrado y = y*y Una función que toma como argumento algo de tipo T 1 y lo transforma en algo de tipo T 2 tiene por tipo T 1 T 2 sucesor :: Int ->Int La aplicación de una función f a e (f e) se define como la sustitución del argumento de f por e en el cuerpo de f sucesor 5 x+1[5/x]
11 Funciones (II) Todas las definiciones dentro del mismo contexto son mutuamente recursivas: f x = g (x-1) g x = if x == 0 then 0 else f (x-1) f 3 g 2 f 1 g 0 0 f 4 g 3 f 2 g 1 f 0 g (-1)... Si f no está definida en x, decimos que f x = Función anónima: \<arg> -> <expr> (\x ->x+2) 4 x+2[4/x] La definición de funciones es una ayuda sintáctica: sucesor x = x+1 sucesor = \x ->x+1 11
12 Guardias Ayuda sintáctica para la definición de funciones: <función> <argumento> <guardia 1 > = <expr 1 > <guardia 2 > = <expr 2 >.. <guardia n > = <expr n > Las guardias deben ser de tipo Bool; las expr i tienen que ser del mismo tipo (imagen de la función) Las guardias se evalúan de arriba a abajo, hasta encontrar una guardia i que sea True la función devuelve expr i otherwise (o True) puede usarse como caso por defecto fact n n == 0 = 1 otherwise = n * fact (n-1) 12
13 Funciones de Orden Superior Funciones que reciben como argumento una función o que devuelven una función como resultado: Función como argumento: f1 :: (Int -> Int) -> Int f1 g = 2 + g 3 Función como resultado: f2 :: Int -> (Int -> Int) f2 x = \y -> x+y Función como argumento y como resultado: f3 :: (Int -> Int) -> (Int -> Int) f3 g = \y -> 2 * g (y+1) 13
14 Funciones de Orden Superior (II) Diferentes formas de escribir lo mismo f = \x -> (\y -> x+y) f = \x -> \y -> x+y f x = \y -> x+y f x y = x+y f = \x y -> x+y (f 3) es una función Int ->Int que dado y, devuelve 3+y. (f 3) 4 ((\x ->x+y) 3) 4 (\y ->3+y) La aplicación asocia por la izquierda: (f 3) 4 f 3 4 El constructor de tipo -> asocia por la derecha: Int ->(Int ->Int) Int ->Int ->Int (Int ->Int) ->Int Int ->Int ->Int 14
15 Funciones con Varios Argumentos Todas las funciones tienen un único argumento (Dominio) y devuelven un único resultado (Imagen) Una función que devuelve una función como resultado, puede considerarse como una función de dos argumentos: f :: Int ->Int ->Int f f x y = x+y f 3 \y ->3+y (Aplicación parcial) Si es un operador infijo, ( ) es una función prefija equivalente a+b (+) a b Si f es una función de 2 argumentos, f es un operador infijo equivalente mod a b a mod b 15
16 Pattern-Matching Definir ecuaciones basadas en la forma del argumento Forma más simple: constantes e identificadores fact 0 = 1 fact n = n * fact (n-1) Comprueba de arriba a abajo hasta encontrar el patrón que encaje Una constante sólo encaja con un argumento igual Un identificador encaja con cualquier argumento El comodín _ hace las veces de identificador Se puede combinar con las guardias fib 0 = 1 fib 1 = 1 fib n n > 1 = fib (n-2) + fib (n-1) otherwise = error "fib de un número negativo" 16
17 Producto cartesiano Tipo Producto (Tuplas) A = {1, 2, 3} B = {a, b} A B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)} Si a :: T 1 y b :: T 2 entonces (a,b) :: (T 1,T 2 ) Generalizable para tuplas de aridad n > 2 (True, "hola", \x -> x ++ ".") :: (Bool, String, String -> String) Funciones sobre tuplas: Uso de pattern-matching mayor :: (Int,Int,Int) -> Int mayor (x,y,z) x > y && x > z = x y > x && y > z = y otherwise = z Los componentes de una tupla pueden ser otras tuplas ((1,2),3) :: ((Int,Int),Int) (1,(2,3)) :: (Int,(Int,Int)) (1,2,3) :: (Int,Int,Int) 17
18 Tipo Producto (Tuplas) (II) Un uso: implementar funciones de varios argumentos suma :: (Int,Int) -> Int suma (x,y) = x+y Otro uso común: Funciones que devuelven varios resultados sumayproducto :: Int -> Int -> (Int,Int) sumayproducto m n m > n = (0,1) otherwise = let (s,p) = sumayproducto (m+1) n in (m+s, m*p) El uso de sinónimos de tipo simplifica las anotaciones de tipo type Jugador = (String, String, Int) roberto :: Jugador roberto = ("Roberto Carlos", "Brasil", 3) nacionalidad :: Jugador -> String nacionalidad (_,pais,_) = pais 18
19 Polimorfismo El mismo código puede ser utilizado con distintos tipos Distinguimos tipos (con mayúsculas) de variables de tipo (con minúsculas) pueden ser reemplazadas por cualquier tipo El tipo de id dada su definición id x = x es a ->a. La variable de tipo a puede reemplazarse por cualquier tipo válido, dando lugar a todos las posibles usos de id: Sustitución de a Int (Int,Int) Int ->Int. Tipo resultante para id Int ->Int (Int,Int) ->(Int,Int) (Int ->Int) ->(Int ->Int). Un tipo e que contiene una variable de tipo a (esquema de tipo) es realmente a tipos. e 19
20 Polimorfismo (II) Polimorfismo + Funciones de Orden Superior = Abstracción prod :: (a -> b) -> (c -> d) -> (a,c) -> (b,d) prod (f,g) = par (f.fst, g. snd) sumayproducto :: Int -> Int -> (Int,Int) sumayproducto m n m > n = (0,1) otherwise = prod (+m) (*m) (sumayproducto (m+1) n) Si es un operador binario, ( a) es (\x ->x a) y (a ) es (\x ->a x) (secciones) Composición de funciones: operador. (predefinido) (.) :: (a -> b) -> (c -> a) -> (c -> b) f. g = \x -> f (g x) f = (+1). (^2) 20
21 Currificación Dos formas de representar funciones multiargumento: Currificada: Utilizando funciones de orden superior suma :: Int -> Int -> Int suma x y = x+y Decurrificada: Utilizando funciones sobre tuplas suma :: (Int,Int) -> Int suma (x,y) = x+y Preferencia: currificadas (por el uso de aplicación parcial) Es posible transformar un formato en el otro (predefinidas) curry :: ((a,b) -> c) -> (a -> b -> c) curry f = \x -> \y -> f (x,y) uncurry :: (a -> b -> c) -> ((a,b) -> c) uncurry f = \(x,y) -> f x y El término currificación se establece en honor a Haskell B. Curry 21
22 Listas Colección ordenada de valores homogéneos Si a 1 ::T, a 2 ::T,..., a n ::T entonces [a 1,a 2,...,a n ] :: [T ] Algunos ejemplos: [1,2,3] :: [Int] [ (True,1), (False,2) ] :: [(Bool,Int)] [ (+1), (^2), (\x -> x) ] :: [Int -> Int] [ [1,2,3], [4], [5,6] ] :: [[Int]] Las listas se crean a partir de dos constructores: [] :: [a], la lista vacía (:) :: a ->[a] ->[a], constructor infijo que a partir de un elemento y una lista construye una lista nueva, resultado de pegar el elemento en la cabeza de la lista 1:(2:(3:[])) 1:2:3:[] [1,2,3] a:(b:c) (a:b):c 22
23 Listas (II) Funciones sobre listas: pattern-matching null :: [a] -> Bool null [] = True null _ = False -- predefinida head :: [a] -> a head (x:_) = x tail :: [a] -> [a] tail (_:xs) = xs -- predefinida -- predefinida last :: [a] -> a last (x::xs) = if null xs then x else last xs init :: [a] -> [a] init (x:xs) = in null xs then [] else init xs concat :: [[a]] -> [a] concat [] = [] concat (xs:xss) = xs ++ concat xss Herramienta fundamental: inducción 23
24 sum :: [Int] -> Int sum [] = 0 sum (x:xs) = x + sum xs -- predefinida sum :: [Int] -> Int sum xs = if xs == [] then 0 else head xs + sum (tail xs) 24
25 Funciones sobre listas (II) reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] length :: [a] -> Int length [] = 0 length (_:xs) = 1 + length xs -- predefinida (++) :: [a] -> [a] -> [a] -- predefinida [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys) take :: Int -> [a] -> [a] take 0 xs = [] take _ [] = [] take n (x:xs) = x: take (n - 1) xs drop :: Int -> [a] -> [a] drop 0 xs = xs drop _ [] = [] drop n (x:xs) = drop (n - 1) xs 25
26 Funciones sobre listas (III) (!!) :: [a] -> Int -> a (x:xs)!! 0 = x (x:xs)!! n = xs!! (n - 1) map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = fx : map f xs filter :: (a -> Bool) -> [a] -> [a] filter p [] = [] filter p (x:xs) = if p x then x: filter p xs else filter p xs zip :: [a] -> [b] -> [(a,b)] zip [] _ = [] zip _ [] = [] zip (x:xs) (y:ys) = (x,y) : zip xs ys zipwith :: (a -> b -> c) -> [a] -> [b] -> [c] zipwith f xs ys = map (uncurry f) (zip xs ys) 26
27 Funciones sobre listas (IV) zipp :: ([a], [b]) -> [(a,b)] zipp = uncurry zip zippwith :: (a -> b -> c) -> ([a], [b]) -> [c] zippwith f = map (uncurry f). zipp par (f,g) x = (f x, g x) unzip :: [(a,b)] -> ([a],[b]) unzip = par (map fst, map snd) 27
28 La familia de funciones fold foldr :: (a -> b -> b) -> b -> [a] -> b foldr f e [] = e foldr f e (x:xs) = f x (foldr f e xs) foldl :: (b -> a -> b) -> b -> [a] -> b foldl f e [] = e foldl f e (x:xs) = foldl f (f e x) xs foldr1 :: (a -> a -> a) -> [a] -> a foldr1 f (x:xs) = if null xs then x else f x (foldr1 f xs) foldl1 :: (a -> a -> a) -> [a] -> a foldl1 f (x:xs) = foldl f x xs 28
29 concat :: [[a]] -> [a] concat = foldr (++) [] Definiciones con foldr reverse :: [a] -> [a] reverse = foldr snoc [] where snoc x xs = xs ++ [x] length :: [a] -> Int lenght = foldr increm 0 where increm x n = 1 + n sum :: Num a => [a] -> a sum = foldr (+) 0 and :: [Bool] -> Bool and = foldr (&&) True map :: (a -> b) -> [a] -> [b] map f = foldr (cons. f) [] where cons x xs = x:xs 29
30 Definiciones con foldr (II) maxlist :: (Ord a, Bounded a) => [a] -> a maxlist = foldr ( max ) minbound unzip :: [(a,b)] -> ([a],[b]) unzip = foldr conss ([],[]) where conss (x,y) (xs, ys) = (x:xs, y:ys) 30
31 inits & tails inits :: [a] -> [[a]] inits [] = [[]] inits (x:xs) = [] : map (x:) (inits xs) tails :: [a] -> [[a]] tails [] = [] tails (x:xs) = (x:xs) : tails xs 31
32 La familia de funciones scan scanl :: (a -> b -> a) -> a -> [b] -> [a] scanl f e = map (foldl f e). inits scanl :: (a -> b -> a) -> a -> [b] -> [a] -- eficiente scanl f e [] = [e] scanl f e (x:xs) = e : scanl f (f e x) xs scanr :: (a -> b -> b) -> b -> [a] -> [b] scanr f e = map (foldr f e). tails scanr :: (a -> b -> b) -> b -> [a] -> [b] -- eficiente scanr f e [] = [e] scanr f e (x:xs) = f x (heay ys) : ys where ys = scanr f a xs 32
33 Leyes de take & drop Leyes take m. take n = take (m min n) drop m. drop n = drop (n + m) take m. drop m = drop n. take (m + n) Leyes del map map id = id map (f. g) = map f. map g f. head = head. map f map f. tail = tail. map f map f. reverse = reverse. map f map f. concat = concat. map (map f) Leyes del filter filter p. filter q = filter (p and q) x && q x filter p. concat = concat. map (filter p) donde (p and q) x = p 33
34 Leyes del prod y par Leyes (II) prod(f,g) = par(f.fst, g.snd) prod(f,g).par(h,k) = par(f.h,g.k) par (f,g).h = par(f.h,g.h) Leyes del zip zipp(unzip xys) = xys prod(map f, map g).unzip = unzip.map(prod(f,g)) zipp.prod(map f, map g) = map(prod(f,g)).zipp 34
35 Teoremas de la dualidad Primer teorema de la dualidad foldr ( ) e xs = foldl ( ) e xs cuando : es asociativo e es su elemento neutro Segundo teorema de la dualidad foldr ( ) e xs = foldl ( ) e xs cuando para todo x, y, y z: x (y z) = (x y) z z e = e x Tercer teorema de la dualidad foldr f e xs = foldl (flip f) e (reverse xs) donde flip f x y = f y x 35
36 Teorema de fusión para foldr f. foldr g a = foldr h b cuando : f es estricta f a = b Teoremas de fusión f (g x y) = h x (f y) para todo x e y Teorema de fusión para foldl f. foldl g a = foldl h b cuando : f es estricta f a = b f (g x y) = h (f x) y para todo x e y 36
37 Teorema de fusión fold-map Teoremas de fusión(ii) foldr f a. map g = foldr (f. g) a cuando : foldr f a es estricta Teorema de fusión fold-concat foldr f a. concat = foldr (flip foldr f)) a cuando : foldr f a es estricta Ley del Contable foldr f e.concat=foldr f e.map(foldr f e) cuando : f es asociativa e es su elemento neutro 37
38 Ley de fusión fold-scan Teoremas de fusión(ii) foldr1 ( ).scanl ( ) e = foldr ( ) e cuando: x y = e ( x y) otimes es asociativo e es su elemento neutro es distributivo con respecto a : x (y z = (x y) (x z) 38
39 Mayor suma de segmentos Dada una secuencia de números, se pide calcular la mayor de las sumas de todos los segmentos de la secuencia. Por ejemplo, la secuencia: [ -1, 2, -3, 5, -2, 1, 3, -2, -2, -3, 6] tiene como mayor suma 7, que es la suma del segmento [5, -2, 1, 3]. 39
40 Mayor suma de segmentos(ii) mss :: [Int] -> Int mss = maxlist.map sum.segs segs :: [a] -> [[a]] segs = concat.map inits. tails La evaluación directa de mss necesita un número de pasos proporcional a n 3 para una lista de longitud n. Hay aproximadamente n 2 segmentos y sumar todos ellos necesita aproximadamente n 3 pasos. 40
41 Mayor suma de segmentos(iii) Sustituimos la definición de segs en mss: maxlist.map sum.concat.map inits.tails usamos la ley del map map f.concat = concat. map (map f) maxlist.concat.map (map sum).map inits.tails usamos la ley del contable foldr f e.concat=foldr f e.map(foldr f e) maxlist.map maxlist..map (map sum).map inits.tails usamos la ley map (f.g) = map f. map g) maxlist.map maxlist.map (map sum.inits).tails usamos la ley map (f.g) = map f. map g) maxlist.map (maxlist.map sum.inits).tails 41
42 Mayor suma de segmentos(iii) sustituimos map sum.inits = scanl (+) 0 maxlist.map (maxlist.scanl (+) 0).tails dado que maxlist = foldr1 ( max ) y (+) es distributivo con respecto a ( max ) aplicamos la lef de fusión fold-scan maxlist.map (foldr ( ) 0).tails donde x y = 0 max (x + y) sustituimos map (foldr f e). tails = scanr f e maxlist.scanr ( ) 0 El resultado es un programa que calcula la mayor suma de segmentos en tiempo lineal 42
43 Strings El tipo String es un sinónimo de tipo: type String = [Char] Sintaxis especial para las cadenas de caracteres: [ h, o, l, a ] "hola" "hola "++ [ m, u, n, d, o ] == "hola mundo" amayusculas :: String -> String amayusculas [] = [] amayusculas (x:xs) = toupper x : amayusculas xs 43
44 Enumeraciones Lista de elementos entre m y n: enumfromto :: Int -> Int -> [Int] -- predefinida enumfromto m n m > n = [] otherwise = m : enumfromto (m+1) n Forma alternativa: enumfromto m n == [m..n] [3..7] == enumfromto 3 7 == [3,4,5,6,7] Otra forma de definir una lista: [m,m + k..n] [m,m + k..n] [m,m + k,m + 2k,...,m + ck] m + ck n < m + (c + 1)k [3,5..10] == enumfromthento == [3,5,7,9] También vale con Char [ a.. z ] == [ a, b,..., z ] == "abcdefghijklmnopqrstuvwxyz" 44
45 Comprensión de listas (List Comprehension) Construcción de listas basándonos en otras listas Forma más simple: [expr pat <- lista] pat <- lista es un generador: se recorre lista secuencialmente y se hace pattern-matching con pat. La lista resultado tiene un elemento por cada elemento generado, que se calcula según expr [ 2*x x <- [1..10]] == [2,4,6,8,10,12,14,16,18,20] Es posible más de 1 generador: [expr pat 1 <- l 1,...,pat n <- l n ] [(x,y) x <- [1..3], y <- [True,False]] == [(1,True), (1,False), (2,True), (2,False), (3,True), (3,False)] [(x,y) x <- [1..3], y <- [1..x]] == [(1,1), (2,1), (2,2), (3,1), (3,2), (3,3)] 45
46 Comprensión de listas (List Comprehension) (II) Guardias para limitar generación: [expr pat <- lista, guardia] [2*x x <- [1..10], x > 5] == [12,14,16,18,20] [(x,y) x <- [1..3], y <- [1..3], x /= y] == [ (1,2), (1,3), (2,1), (2,3), (3,1), (3,2) ] Simplificación de definiciones: menores_que k xs = [ x x <- xs, x < k ] filter p xs = [ x x <- xs, p x ] map f xs = [f x x <- xs] qs [] = [] qs (x:xs) = qs [y y <- xs, y < x] ++ [x] ++ qs [y y <- xs, y >= x] 46
47 Mónadas El grupo de las operaciones de entrada salida en Haskell se denota como IO (). Una exprosion de tipo IO () denota una acción; cuando se evalúa, la acción se realiza. Escribir un carácter: putchar :: Char -> IO () No hacer nada done :: IO () Combinar dos acciones de E/S (>>) :: IO () -> IO () -> IO () Escribir un String write :: String -> IO () write [] = done write (x:xs) = putchar x >> write xs 47
48 Mónadas(II) Escribir un String terminado en retorno de carro writeln :: String -> IO () writeln xs = write xs >> putchar \n Leer un carácter getchar :: IO Char Generalización de done return :: a -> IO a Implementación de done done :: IO () done = return () Generalización del tipo de (>>) (>>) :: IO a -> IO b -> IO b si p y q son acciones, entonces p >> q es una acción que, cuando se realice, primero efectúa p, ignora el valor devuelto y despus realiza q. 48
49 Generalización de (>>) Mónadas(II) (>>=) :: = IO a -> (a -> IO b) -> IO b Leer n caracteres readn :: Iont -> IO String readn 0 = return [] readn n = getchar >>= q where q c = read (n-1) >>= r where r cs = return (c:cs) Clase Monad class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b Notación do readn :: Iont -> IO String readn 0 = return [] readn n = c <- getchar cs <- readn (n-1) return (c:cs) 49
50 Leyes de las Mónadas return es un elemento neutro por la derecha de >> p >>= return == p return es un elemento neutro por la izquierda de >> en el sentido (return e) >>= q = q e >>= es asociativa en el siguiente sentido (p >>= q) >>= r = p >>= s where s x = (q x >>= r) 50
Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas
Programación Declarativa Haskell Informática Sistemas Curso 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 detallesProgramación con listas. El tipo lista
Capítulo 6. Programación con listas 68 Programación con listas El tipo lista La lista representa colecciones de objetos homogéneas (todos los objetos han de tener el mismo tipo). infixr 5 : data [a] =
Más detallesTema II: Introducción al Lenguaje Funcional
Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)
Más detallesProgramación Funcional
Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay Operaciones sobre listas Listas El tipo de las listas es uno de los más usados en PF Su
Más 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 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 en Haskell. Cecilia Manzino
Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas
Más 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 8: Funciones de orden superior
Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /
Más 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 8: Funciones de orden superior
Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema
Más 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 detallesdata Tree a = Tip Node a (Tree a) (Tree a) deriving Show
Preguntas seleccionadas de pruebas de evaluación Pregunta 1 Dadas las siguientes definiciones: data Tree a = Tip Node a (Tree a) (Tree a) deriving Show cambiar :: [Int] -> Tree [Int] -> Tree [Int] cambiar
Más 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 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 detallesInformática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:
Ejercicios de Introducción a Haskell Informática de 1 o de Matemáticas Ejercicio 1 Consideremos la siguiente definición: doble x = x + x El valor de doble(doble 3) se puede calcular usando distintos métodos
Más detallesIntroducción a OCaml. October 19, 2015
Introducción a OCaml October 19, 2015 OCaml: introducción Es un dialecto de ML. Lenguaje de programación funcional. Fuertemente tipado. Con inferencia de tipos. Polimórfico. [Página oficial: http://www.ocaml.org/
Más 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 detallesEl 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 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 detallesProgramación Funcional
Programación Funcional 2 Tabla de Contenidos 0.1. Evolución y Conceptos básicos................... 4 0.2. Definición de funciones........................ 4 0.3. Sistema de Tipos...........................
Más 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 detallesFunciones Segunda parte
Expresiones condicionales Matemática Discreta usando el computador 2011 Funciones Segunda parte Una expresión condicional utiliza una expresión de tipo Bool para decidir entre dos opciones Estructura if...then...
Más 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. 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 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 detallesLaboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell
Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell Pedro A. Góngora Luna 1 1. Operadores La figura 1 muestra la lista de algunos de los operadores básicos definidos en el preludio. La lista
Más 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 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 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 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 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 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 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 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 2: Introducción a Haskell
El Lenguaje Haskell Tema 2: Introducción a Haskell A. Chávez-González 1 A. Riscos-Núñez 1 F. Sancho-Caparrini 1 1 Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
Más 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 detallesMetodologías de Programación II Introducción a OCaml
Metodologías de Programación II Introducción a OCaml Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra
Más 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 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 detallesProgramación declarativa ( )
1 / 132 Programación declarativa (2008 09) Tema 3: Estructuras de datos José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /
Más detallesParadigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2018 FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2) = 3 Enumeración f(x)
Más 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 detallesInformática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Temario
Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Temario 1 Introducción y semántica operacional 2 Tipos predefinidos 3 Patrones y Definiciones de Funciones 4 Funciones
Más 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 detallesProgramación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga
Programación Declarativa Haskell Informática Sistemas Curso 2008-2009 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc :: Float Float inc x = x
Más detallesEjercicios de programación funcional con Haskell
Ejercicios de programación funcional con Haskell José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 8 de
Más 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 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 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 detallesPráctica 1. Programación Funcional Introducción a Helium
Práctica 1. Programación Funcional Introducción a Helium Who? Lenguajes y Paradigmas de Programación Objetivo de la práctica Presentar las facilidades básicas del entorno de programación Helium Presentar
Más detallesTipos y Estructuras de Control. Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR
Tipos y Estructuras de Control Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Datos: variables y constantes Tipos básicos: entero, real, char, lógico Estructuras de control
Más detallesCAPÍTULO IV: 4.1 Introducción a la. Programación Funcional
CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones
Más detallesGuía 2: Funciones, listas, recursión e inducción
Introducción a los Algoritmos - 1er cuatrimestre 2015 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,
Más detallesLenguajes funcionales: λ-cálculo
Lenguajes funcionales: λ-cálculo λ-cálculo (Church 1933) Cálculo para el estudio formal del comportamiento de las funciones Sintaxis: λ expresiones Reglas de reducción de λ expresiones Método matemático
Más 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 detallesEjercicios de programación funcional con Haskell
Ejercicios de programación funcional con Haskell José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 8 de
Más detallesTema 12: Programas interactivos
Tema 12: Programas interactivos Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 12:
Más detalles21/03/2018. Variables y Constantes. Los datos de un programa están representados por variables o constantes y tienen asociado un tipo.
Variables y Constantes Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Los datos de un programa están representados por variables
Más 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 detallesLenguajes de Programación Programación funcional
Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una
Más detallesLaboratorio de Lenguajes de Programación Introducción al lenguaje ML
Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Pedro A. Góngora Luna 1 1. Tipos de datos básicos Para iniciar el intérprete utilizamos el comando sml en el shell de windows o unix:
Más 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 5: Definiciones de listas por comprensión
Tema 5: Definiciones de listas por comprensión Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Más 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 detallesTema 5: Definiciones de listas por comprensión
Tema 5: Definiciones de listas por comprensión Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
Más 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 detallesTutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos
Tutorial Haskell David Julián Guzmán Cárdenas Cristian Alexanther Rojas Cárdenas Luis Ernesto Gil Castellanos Agenda 1. 2. 3. 4. 5. 6. Introducción Aspectos básicos del lenguaje Tipos y clases de tipos
Más 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 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 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 Septiembre de 2006 mbre: Especialidad: Prolog Grupo: Ejercicio 1.1 (1 punto) Realizad el árbol
Más detallesLenguajes de Programación I
Lenguajes de Programación I Tipos de Datos Ernesto Hernández-Novich Copyright c 2006-2010 Tipos de Datos El computador sólo manipula secuencias de bits. Los lenguajes de programación ofrecen
Más detallesGeneración de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Más 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 detallesLaboratorio Análisis Lógico Práctica 1
Laboratorio Análisis Lógico Práctica 1 Pedro Arturo Góngora Luna 1 1 Introducción 1.1 Haskell y la programación funcional En la década de los 30 s, Alonzo Church desarrolló un lenguaje formal llamado cálculo
Más 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 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 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 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 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 detallesGuía 2: Funciones, listas, recursión e inducción
Introducción a los Algoritmos - 2do cuatrimestre 2016 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es continuar aprendiendo programación funcional, es decir,
Más detallesExámenes de Programación funcional con Haskell ( )
Exámenes de Programación funcional con Haskell (2009 2014) José A. Alonso (coord.) y Gonzalo Aranda, Antonia M. Chávez, Andrés Cordón, María J. Hidalgo, Francisco J. Martín Miguel A. Martínez, Ignacio
Más detallesIntroducción a la programación. Cecilia Manzino
Paradigmas Un paradigma es un modelo o patrón en cualquier disciplina científica. Un paradigma de programación representa un estilo de programación en cual se escriben soluciones a problemas en términos
Más detallesTema 1. Tema 2. Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga
Informática Pepe Gallardo Universidad de Málaga 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc
Más 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 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 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 detallesManos a la obra: Recursión, división y listas
Manos a la obra: Recursión, división y listas Taller de Álgebra I Cuatrimestre de verano de 2015 Calentando motores La clase pasada vimos ejemplos de definiciones recursivas. Hoy vamos a continuar con
Más detallesApunte Laboratorio ALPI *
Apunte Laboratorio ALPI * Pablo Speciale * Análisis de Lenguaje de Programación I - Universidad Nacional de Rosario 1 2 ÍNDICE GENERAL ÍNDICE GENERAL 3 Índice 1. Conceptos Importantes 4 1.1. Valores...........................................
Más detalles8 INTRODUCCIÓN AL OBJECTIVE CAML
8 INTRODUCCIÓN AL OBJECTIVE CAML Objective Caml (Ocaml) es un lenguaje de programación funcional tipificado estáticamente, aunque los tipos pueden inferirse en tiempo de ejecución; y con un mecanismos
Más 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 detallesUn calculadora avanzada... y algo más!
INFORMÁTICA, GRUPO D Un calculadora avanzada... y algo más! Vamos a familiarizarnos con el entorno interactivo de Python. Vamos a construir expresiones aritméticas y a guardar los resultados en variables
Más detallesLenguajes de Programación. Capítulo 4. Expresiones.
Lenguajes de Programación. Capítulo 4. Expresiones. Carlos Ureña Almagro Curso 2011-12 Contents 1 Introducción 2 2 Literales 5 2.1 Literales tipos primitivos......................................... 5
Más detallesComprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.
Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos
Más 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 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 detallesEstructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa
Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,
Más detallesParadigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa
Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado
Más detallesTema 13: Programas interactivos
Tema 13: Programas interactivos Informática (2015 16) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 38 Tema 13: Programas
Más detalles