9 DECLARACIÓN DE TIPOS Y PATRONES

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

Download "9 DECLARACIÓN DE TIPOS Y PATRONES"

Transcripción

1 9 DECLARACIÓN DE TIPOS Y PATRONES Aunque los tipos de datos predefinidos en Ocaml permiten la construcción de estructuras de datos a partir de tuplas y listas, normalmente es necesario definir nuevos tipos de datos para describir ciertas estructuras de datos. En Ocaml, las definiciones de tipos son recursivas y pueden estar parametrizadas mediante el uso de variables de tipo, como las usadas en el tipo a list que hemos revisado anteriormente. La inferencia de tipos toma en cuenta estas declaraciones para producir el tipo final de las expresiones. Una característica especial de la familia de lenguajes ML es el uso de patrones y la correspondencia entre ellos como mecanismo de control. La definición de una función se puede especificar como un caso de correspondencia entre patrones sobre uno de sus parámetros, permitiendo una definición basada en casos. Presentaremos el mecanismo de correspondencia de patrones sobre los tipos predefinidos en el lenguaje y posteriormente describiremos como declarar tipos estructurados y como construir valores de tales tipos, así como la forma de acceder a sus componentes mediante correspondencia de patrones.. Un patrón no es estrictamente hablando una expresión de OCaml, sino una forma adecuada de acomodar elementos del lenguaje, como los constructores del mismo, las variables y el símbolo _ llamado comodín. La correspondencia entre patrones se aplica a valores. Se usa para reconocer la forma de un valor y guiar la computación de acuerdo con esta forma, asociando a cada forma posible del valor, una expresión a evaluar. Su forma general es: 1 match expr with 2 p_1 -> expr_ p_n -> expr_n donde el valor expr es comparado secuencialmente con los patrones p 1.p n y el patrón p i es consistente con el valor de expr, entonces la expresión expr i es evaluada. Los patrones p i, evidentemente, son del mismo tipo. Lo mismo ocurre con las expresiones expr i. La barra que precede el primer caso es opcional. Ejemplo 29 Por ejemplo, la definición de la implicación con signatura bool bool! bool, es: 1 # let implica v = match v with 2 (true,true) -> true 3 (true,false) -> false 4 (false,true) -> true 5 (false,false) -> false;; 117

2 118 6 val implica : bool * bool -> bool = <fun> Usando variables que agrupen varios casos, es posible obtener una definición más compacta de implicación: 1 # let implica2 v = match v with 2 (true,x) -> x 3 (false,x) -> false;; 4 val implica2 : bool * bool -> bool = <fun> Las dos versiones de implica computan la misma función, es decir, regresan el mismo valor para entradas iguales. Patrones lineales Un patrón necesita ser lineal, esto es, ninguna variable dada puede ocurrir más de una vez dentro del patrón bajo correspondencia. Por ello, el siguiente ejemplo conduce al error indicado. Ejemplo 30 Ejemplo de un error por no linealidad en el patrón bajo correspondencia: 1 # let igual c = match c with 2 (x,x) -> true 3 (x,y) -> false ;; 4 Characters 34-35: 5 (x,x) -> true 6 ^ 7 Error: Variable x is bound several times in this matching El código anterior fuese correcto si el compilador de OCaml entendiera el concepto de prueba de igualdad, pero esto acarrea normalmente muchos problemas. Por ejemplo, si aceptamos un criterio de igualdad física entre valores, obtenemos un sistema demasiado débil como para reconocer la igualdad entre dos ocurrencias de la lista [1; 2] (como ocurre de hecho con eq en Lisp). Por otro lado, las pruebas de igualdad estructural, nos pueden llevar a la construcción de valores no funcionales recursivos. Ejemplo 31 Ejemplo de valor no funcional recursivo. Una lista circular con un elemento: 1 # let rec l = 1::l ;; 2 val l : int list = 3 [1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;.] que conlleva a recorrer indefinidamente el valor para intentar verificar la igualdad y fallar por desbordamiento de memoria.

3 . 119 Patrones con comodines El símbolo _ se corresponde con todos los valores posibles y se conoce como comodín. Puede usarse para buscar correspondencias con tipos complejos, por ejemplo, estructuras circulares. Si queremos simplificar aún más la definición de implica podemos usar el comodín de la siguiente manera: Ejemplo 32 Una simplificación más de la implicación usando comodines: 1 # let implica3 v = match v with 2 (true,false) -> false 3 _ -> true;; 4 val implica3 : bool * bool -> bool = <fun> La definición de una correspondencia entre patrones debe cubrir el conjunto completo de posibles valores bajo la correspondencia. Si este no es el caso, el compilador nos advierte de ello. 1 # let es_cero n = match n with 0 -> true ;; 2 Characters 16-38: 3 let es_cero n = match n with 0 -> true ;; 4 ^^^^^^^^^^^^^^^^^^^^^^ 5 Warning P: this pattern-matching is not exhaustive. 6 Here is an example of a value that is not matched: val es_cero : int -> bool = <fun> El comodín puede usarse en este caso para completar los casos a revisar: 1 # let es_cero n = match n with 2 0 -> true 3 _ -> false ;; 4 val es_cero : int -> bool = <fun> Ocaml ofrece otro mecanismo de seguridad para el caso de definiciones de correspondencia entre patrones no exhaustiva. En caso de que ningún patrón haya sido seleccionado, el compilador genera una excepción. Revisen las siguientes evaluaciones: 1 # let f x = match x with 0 -> 1 ;; 2 Characters 10-29: 3 let f x = match x with 0 -> 1 ;; 4 ^^^^^^^^^^^^^^^^^^^ 5 Warning P: this pattern-matching is not exhaustive. 6 Here is an example of a value that is not matched: val f : int -> int = <fun> 9 # f 0 ;; 10 - : int = 1 11 # f 1 ;; 12 Exception: Match_failure ("", 15, -33).

4 120 Como la excepción no ha sido manejada en el programa, la computación en curso se detiene. Combinando patrones Es posible combinar patrones para obtener un nuevo patrón, siempre y cuando estos patrones no impliquen nombres. De forma que cada uno de ellos debe incluir únicamente valores constantes y comodines. Consideren el siguiente ejemplo: Ejemplo 33 Un predicado es_vocal definido usando combinación de patrones: 1 # let es_vocal x = match x with 2 a e i o u -> true 3 _ -> false;; 4 val es_vocal : char -> bool = <fun> Correspondencia entre patrones de un parámetro Como la correspondencia entre patrones puede facilitarnos definir una función basados en casos, el constructor function nos permite hacer correspondencia de patrones sobre parámetros. De echo la forma: 1 function p_1 -> expr_1. p_n -> expr_n ;; es equivalente a la forma: 1 function expr -> match expr with 2 p_1 -> expr_ p_n -> expr_n ;; Nombrando valores bajo correspondencia La palabra reservada as, nos permite nombrar valores bajo la correspondencia de patrones. Consideren el siguiente ejemplo. Ejemplo 34 La función min_rat regresa el menor de dos números racionales. Su definición usa valores nombrados en la correspondencia de patrones: 1 # let min_rat pr = match pr with 2 ((_,0),p2) -> p2 3 (p1,(_,0)) -> p1 4 (((n1,d1) as r1), ((n2,d2) as r2)) -> 5 if (n1*d2) < (n2*d1) then r1 else r2;; 6 val min_rat : (int * int) * (int * int) -> int * int = <fun> así podemos computar que es más pequeño, un medio o un tercio:

5 # min_rat ((1,3),(1,2)) ;; 2 - : int * int = (1, 3) Correspondencia de patrones con guardias Las guardias se usan para implementar evaluaciones condicionadas justo después de llevarse a cabo la correspondencia de patrones. Si la expresión que define la guardia regresa true, entonces la expresión asociada al patrón es evaluada. Para definir guardias se utiliza la palabra reservada when. Ejemplo 35 La función de igualdad entre racionales hace uso de dos guardias. 1 # let igual_rat pr = match pr with 2 ((_,0),(_,0)) -> true 3 ((_,0),_) -> false 4 (_,(_,0)) -> false 5 ((n1,1),(n2,1)) when n1 = n2 -> true 6 ((n1,d1),(n2,d2)) when (n1*d2)=(n2*d1) -> true 7 _ -> false;; 8 val igual_rat : (int * int) * (int * int) -> bool = <fun> de forma que podemos computar si un medio y dos cuartos son iguales: 1 # igual_rat ((1,2),(2,4)) ;; 2 - : bool = true Si la guardia falla, por ejemplo en el cuarto patrón, la correspondencia de patrones continua con los siguientes casos.. Otro ingrediente posible en los programas Ocaml es la definición de tipos. Hay dos grandes familias de tipos: los tipos producto para tuplas o registros; y los tipos suma para las uniones. La palabra reservada para definir tipos es type y, al contrario que la definición de variables, estas declaraciones son recursivas por defecto. Esto es, cuando se combinan declaraciones de tipos, se pueden usar declaraciones de tipos mutuamente recursivas. Es posible parametrizar las declaraciones de tipo usando variables de tipo. Recuerden que el nombre de una variable de tipo siempre comienza con apóstrofo. Si se necesitan varios parámetros en la declaración, estos pueden incluirse como una tupla. Siempre es posible definir un tipo a partir de otro u otros ya existentes. Esto es útil para especializar un tipo de datos que resulta ser demasiado general. Ejemplo 36 Especializando un tipo demasiado general. 1 # type parametro par_con_entero = int * parametro ;;

6 122 2 type a par_con_entero = int * a 3 # type par_especifico = float par_con_entero ;; 4 type par_especifico = float par_con_entero Sin embargo sin restricciones de tipo, la inferencia computa el tipo más general. Usando restricciones se puede obtener el tipo deseado. 1 # let x = (3,3.14) ;; 2 val x : int * float = (3, 3.14) 3 # let (x:par_especifico) = 3,3.14 ;; 4 val x : par_especifico = (3, 3.14) Registros o tipos producto Los registros su tuplas en donde cada uno de sus componentes tiene nombre, como los registros en Pascal o las estructuras en C. Un registro siempre corresponde a la declaración de un nuevo tipo. La declaración de un tipo se define mediante la declaración de su nombre y de los nombres y tipos de cada uno de sus campos. Ejemplo 37 Definición del registro complejo. 1 # type complejo = {re:float; im:float} ;; 2 type complejo = { re : float; im : float; } La creación de un valor del registro se realiza dando valor a cada uno de sus componentes, posiblemente en orden arbitrario. 1 # let c = {re=2.;im=3.};; 2 val c : complejo = {re = 2.; im = 3.} El acceso a los componentes de un registro puede llevase a cabo usando la notación punto, usual en otros lenguajes; o bien mediante la correspondencia entre patrones. Ejemplo 38 Multiplicación y suma de complejos, la primer función usa notación punto, la segunda correspondencia entre patrones. 1 # let suma_complejos c1 c2 = 2 {re= c1.re+.c2.re; im= c1.im+.c2.im};; 3 val suma_complejos : complejo -> complejo -> complejo = <fun> 4 # let mult_complejos c1 c2 = match (c1,c2) with 5 ({re=x1;im=y1},{re=x2;im=y2}) -> 6 {re= x1*.x2-.y1*.y2; im= x1*.y2+.x2*.y1};; 7 val mult_complejos : complejo -> complejo -> complejo = <fun> 8 # suma_complejos c c ;; 9 - : complejo = {re = 4.; im = 6.} 10 # mult_complejos c c ;; 11 - : complejo = {re = -5.; im = 12.}

7 . 123 Las ventajas de registros con respecto a las tuplas son: información descriptiva y distintiva gracias a los nombres de los campos, lo que permite simplificar la correspondencia entre patrones; y el acceso uniforme a los campos, mediante el nombre. Esto es, el orden de los campos ya no son significantes, sólo los nombres cuentan. Ejemplo 39 Los ejemplos siguientes muestran la simplificación para acceder a los campos en registros, con respecto a las tuplas. 1 # let a = (1,2,3) ;; 2 val a : int * int * int = (1, 2, 3) 3 # let f tr = match tr with x,_,_ -> x ;; 4 val f : a * b * c -> a = <fun> 5 # f a ;; 6 - : int = 1 7 # type triplete = {x1:int; x2:int; x3:int} ;; 8 type triplete = { x1 : int; x2 : int; x3 : int; } 9 # let b = {x1=1; x2=2; x3=3} ;; 10 val b : triplete = {x1 = 1; x2 = 2; x3 = 3} 11 # let g tr = tr.x1 ;; 12 val g : triplete -> int = <fun> 13 # g b ;; 14 - : int = 1 Existe una construcción que permite crear un registro idéntico a otro con excepción de algunos campos. Ejemplo 40 Creación de registros cuasi idénticos. 1 # let c = {b with x1=0} ;; 2 val c : triplete = {x1 = 0; x2 = 2; x3 = 3} Tipos suma A diferencia de las tuplas o registros, que se corresponden con los productos cartesianos, la declaración de tipos suma se corresponde con la unión entre conjuntos. Diferentes tipos, por ejemplo enteros y cadenas, pasan a formar un sólo tipo. Los diferentes miembros de la suma se distinguen mediante constructores especializados y correspondencia entre patrones para el acceso a los componentes. Un tipo suma se define dando los nombres de sus constructores (que siempre inician con mayúscula) y los tipos de sus eventuales argumentos. Constructores constantes Un constructor que no espera argumentos se conoce como constructor constante. Este tipo de constructor puede usarse directamente como un valor constante en el lenguaje. Ejemplo 41 Constructores constantes para volados.

8 124 1 # type volado = Aguila Sol ;; 2 type volado = Aguila Sol 3 # Sol ;; 4 - : volado = Sol Evidentemente, el tipo bool puede definirse de esta manera. Constructores con argumentos Los constructores pueden tener argumentos. La palabra reservada of indica el tipo de los argumentos de los constructores. Ejemplo 42 Carta de baraja como tipos suma. 1 # type palo = Oros Copas Espadas Bastos;; 2 type palo = Oros Copas Espadas Bastos 3 # type carta = 4 As of palo 5 Rey of palo 6 Caballo of palo 7 Sota of palo 8 Carta_menor of palo * int;; 9 type carta = 10 As of palo 11 Rey of palo 12 Caballo of palo 13 Sota of palo 14 Carta_menor of palo * int La creación de valores de tipo carta se lleva a cabo mediante la aplicación de constructores a valores de un tipo apropiado. 1 # Rey Oros ;; 2 - : carta = Rey Oros 3 # Carta_menor(Oros,2) ;; 4 - : carta = Carta_menor (Oros, 2) A continuación definiremos una función que lista todas las cartas de un palo dado, pasado como parámetro. 1 # let rec intervalo a b = 2 if a = b then [b] else 3 a::(intervalo (a+1) b);; 4 val intervalo : int -> int -> int list = <fun> 5 # intervalo 2 7 ;; 6 - : int list = [2; 3; 4; 5; 6; 7] 7 # let todas_las_cartas p = 8 let figuras = [As p; Rey p; Caballo p; Sota p ] 9 and otras = List.map (function n -> Carta_menor(p,n)) 10 (intervalo 2 7)

9 in otras;; 12 val todas_las_cartas : palo -> carta list = <fun> 13 # todas_las_cartas Bastos ;; 14 - : carta list = 15 [As Bastos; Rey Bastos; Caballo Bastos; Sota Bastos; 16 Carta_menor (Bastos, 2); Carta_menor (Bastos, 3); 17 Carta_menor (Bastos, 4); Carta_menor (Bastos, 5); 18 Carta_menor (Bastos, 6); Carta_menor (Bastos, 7)] Para manejar los valores de los tipos suma usamos correspondencia entre patrones. Ejemplo 43 Convertidores de carta y palo a cadenas de caracteres mediante correspondencia entre patrones. 1 # let string_of_palo = function 2 Oros -> "oros" 3 Copas -> "copas" 4 Espadas -> "espadas" 5 Bastos -> "bastos";; 6 # let string_of_carta = function 7 As c -> "as de " ^ (string_of_palo c) 8 Rey c -> "rey de " ^ (string_of_palo c) 9 Caballo c -> "caballo de " ^ (string_of_palo c) 10 Sota c -> "sota de " ^ (string_of_palo c) 11 Carta_menor (c,n) -> (string_of_int n) ^ 12 " de " ^ (string_of_palo c);; 13 val string_of_carta : carta -> string = <fun> 14 # string_of_carta (Rey Oros) ;; 15 - : string = "rey de oros" 16 # string_of_carta (Carta_menor (Espadas,3)) ;; 17 - : string = "3 de espadas" Ahora definiremos es_carta_menor usando correspondencia entre patrones: 1 # let es_carta_menor = function 2 Carta_menor _ -> true 3 _ -> false;; 4 val es_carta_menor : carta -> bool = <fun> 5 # es_carta_menor (Carta_menor (Oros,2)) ;; 6 - : bool = true 7 # es_carta_menor (Rey Bastos) ;; 8 - : bool = false Tipos recursivos Los tipos de datos recursivos son indispensables en un lenguaje de programación para describir las estructuras de datos con las que solemos trabajar (listas, pilas, arboles, grafos, etc.). Es por ello que type es por defecto recursivo, al contrario de la declaración de tipos con let. Las listas en Ocaml toman argumentos de un solo tipo (su valor funcional es a list. Si queremos guardar valores de diferentes tipos en una lista, podemos usar un tipo suma recursivo.

10 126 Ejemplo 44 Listas de enteros y caracteres como tipo recursivo 1 # type lista_de_int_y_char = 2 Nil 3 Int_cons of int * lista_de_int_y_char 4 Char_cons of char * lista_de_int_y_char ;; 5 # Char_cons( a,int_cons(5,nil)) ;; 6 - : lista_de_int_y_char = Char_cons ( a, Int_cons (5, Nil)) Tipos recursivos parametrizados Podemos parametrizar la definición anterior para generalizar el concepto de listas de elementos de dos tipos diferentes. Ejemplo 45 Listas de dos tipos diferentes. 1 # type ( a, b) lista_dos_tipos = 2 Nil 3 Acons of a * ( a, b) lista_dos_tipos 4 Bcons of b * ( a, b) lista_dos_tipos;; 5 type ( a, b) lista_dos_tipos = 6 Nil 7 Acons of a * ( a, b) lista_dos_tipos 8 Bcons of b * ( a, b) lista_dos_tipos 9 # Acons(2, Bcons( +, Acons(3,Nil))) ;; 10 - : (int, char) lista_dos_tipos = Acons (2, Bcons ( +, Acons (3, Nil ))) 11 # Acons("Hola",Bcons(1, Nil)) ;; 12 - : (string, int) lista_dos_tipos = Acons ("Hola", Bcons (1, Nil)). Ejemplifiquemos los conceptos de este capítulo con la definición del tipo de datos arbol_binario y sus operaciones. Primero definiremos el tipo de datos siguiendo la definición usual de un árbol binario: Un árbol es un nodo vacío o un nodo interno en cuyo caso tiene dos hijos que a su vez son árboles binarios. 1 # type a arbol_binario = 2 Vacio 3 Nodo of a arbol_binario * a * a arbol_binario;; 4 type a arbol_binario = 5 Vacio 6 Nodo of a arbol_binario * a * a arbol_binario 7 # Nodo(Vacio,1,Vacio) ;; 8 - : int arbol_binario = Nodo (Vacio, 1, Vacio) Primero escribiremos una función para extraer una lista de la información en los nodos de un árbol binario. La lista estará ordenada si inducimos un recorrido transversal del árbol.

11 # let rec lista_de_arbol = function 2 Vacio -> [] 3 Nodo(l,e,r) -> (lista_de_arbol 4 (e :: (lista_de_arbol r));; 5 val lista_de_arbol : a arbol_binario -> a list = <fun> 6 # lista_de_arbol (Nodo (Nodo (Nodo (Vacio, 1, Vacio), 2, Vacio), 7 3, Vacio)) ;; 8 - : int list = [1; 2; 3] Ahora escribiremos una función para crear un árbol binario ordenado a partir de una lista: 1 # let rec inserta x = function 2 Vacio -> Nodo(Vacio,x,Vacio) 3 Nodo(l,e,r) -> if x < e then Nodo(inserta x l, e, r) 4 else Nodo(l,e,inserta x r);; 5 val inserta : a -> a arbol_binario -> a arbol_binario = <fun > 6 # let rec arbol_de_lista = function 7 [] -> Vacio 8 c::r -> inserta c (arbol_de_lista r);; 9 val arbol_de_lista : a list -> a arbol_binario = <fun> 10 # arbol_de_lista [1;2;3;4;5] ;; 11 - : int arbol_binario = 12 Nodo 13 (Nodo (Nodo (Nodo (Nodo (Vacio, 1, Vacio), 2, Vacio), 14 3, Vacio), 4, Vacio), 5, Vacio) 15 # arbol_de_lista [2;1;3;5;4] ;; 16 - : int arbol_binario = 17 Nodo (Nodo (Nodo (Vacio, 1, Nodo (Vacio, 2, Vacio)), 3, Vacio), 4, 18 Nodo (Vacio, 5, Vacio)) Ahora si queremos definir ordena usando las definiciones anteriores tenemos que: 1 # let ordena x = lista_de_arbol(arbol_de_lista x);; 2 val ordena : a list -> a list = <fun> 3 # ordena [5;2;3;6;7;1;4;8] ;; 4 - : int list = [1; 2; 3; 4; 5; 6; 7; 8]

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

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

Más detalles

Introducción a OCaml. October 19, 2015

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

Más detalles

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

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

Más detalles

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

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

Más detalles

8 INTRODUCCIÓN AL OBJECTIVE CAML

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

Más detalles

Introducción a Haskell. Cecilia Manzino

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

Más detalles

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

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

Más detalles

Metodologías de Programación II Introducción

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

Más detalles

En programación funcional no hay instrucciones de asignación; La evaluación de un programa funcional no tiene efectos colaterales; y

En programación funcional no hay instrucciones de asignación; La evaluación de un programa funcional no tiene efectos colaterales; y 1 INTRODUCCIÓN El tema de este segundo curso de Metodologías de Programación es la Programación Funcional En este primer capítulo se presenta un panorama general de este paradigma de programación, con

Más detalles

Tema II: Introducción al Lenguaje Funcional

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

Más detalles

Metodologías de Programación II Dominios y Excepciones

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

Más detalles

El sistema de clases de Haskell. Introducción

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

Más detalles

Tema 9: Declaraciones de tipos y clases

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

Más detalles

Funciones Segunda parte

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

Más detalles

Tema 9: Declaraciones de tipos y clases

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

Más detalles

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

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

Más detalles

Tipos de datos algebraicos

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

Más detalles

Tema 3. Patrones y Definiciones de Funciones

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

Más detalles

Paradigmas de Programación. Práctica 3. Árboles estrictamente binarios

Paradigmas de Programación. Práctica 3. Árboles estrictamente binarios Paradigmas de Programación Práctica 3 Árboles estrictamente binarios En el módulo Fb_tree, escrito en ocaml, está definido el tipo de dato 'a fb_tree que sirve para representar árboles binarios llenos

Más detalles

Tema 3. Patrones y Definiciones de Funciones

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

Más detalles

Tipos en Haskell. Cecilia Manzino

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

Más detalles

Tema 3: Tipos y clases

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

Más detalles

Tema 3: Tipos y clases

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

Más detalles

Tema 2. Tipos predefinidos

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

Más detalles

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

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

Más detalles

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

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

Más detalles

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2.

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2. Índice del capítulo Capítulo 4. Expresiones Lenguajes de Programación Capítulo 4. Expresiones 1. Carlos Ureña Almagro 2. Dpt. Lenguajes y Sistemas Informáticos ETSI Informática y de Telecomunicación Universidad

Más detalles

Tema 3: Tipos y clases

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

Más detalles

Tema 3: Tipos y clases

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

Más detalles

Para entender la recursividad primero tenemos que entender la recursividad

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

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

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

Más detalles

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

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

Más detalles

Tipos paramétricos y recursivos

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

Más detalles

Tema 7. El sistema de clases

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

Más detalles

Procesadores de lenguaje Tema 6 La tabla de símbolos

Procesadores de lenguaje Tema 6 La tabla de símbolos Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

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

Más detalles

Práctica N o 1 - Programación Funcional

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

Más detalles

Programación Funcional Haskell Clase 22

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

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de Programación Tipos de datos abstractos Apareamiento de patrones y gramáticas Manuel Soto Romero Universidad Nacional Autónoma de México Facultad de Ciencias 30 de agosto de 2017 Manuel Soto

Más detalles

Procesadores de lenguaje Tema 6 La tabla de símbolos

Procesadores de lenguaje Tema 6 La tabla de símbolos Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de

Más detalles

Procedimientos y Recursividad

Procedimientos y Recursividad Capítulo 2 Procedimientos y Recursividad 2.1 Introducción Es muy fácil definir un procedimiento en Scheme. El lenguaje proporciona una forma elegante de hacerlo, basada en el cálculo lambda de Alonzo Church

Más detalles

Tipos Recursivos de Datos

Tipos Recursivos de Datos 1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),

Más detalles

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales. ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales. Los nodos terminales (nodos hojas) están rotulados por los

Más detalles

Introducción a Haskell. El lenguaje Haskell

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

Más detalles

Arreglos y Subrangos

Arreglos y Subrangos Arreglos y Subrangos Programación 1 InCo - FING Programación 1 Arreglos y Subrangos InCo - FING 1 / 27 Tipos de datos definidos por el programador Programación 1 Arreglos y Subrangos InCo - FING 2 / 27

Más detalles

Tema 2: Introducción a Haskell

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

Más detalles

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

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

Más detalles

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal

Más detalles

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

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

Más detalles

Pattern matching + Tipos enumerados

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

Más detalles

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

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

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Programación 2 Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Uruguay 2 de marzo de 2016 Programación 2 Introducción al lenguaje C 2 de marzo

Más detalles

Verificación de Tipos

Verificación de Tipos Verificación de Tipos CI4721 Lenguajes de Programación II Ernesto Hernández-Novich Universidad Simón Bolívar Copyright 2012-2016 Hernández-Novich (USB) Verificación de Tipos 2016 1 / 25 Verificación

Más detalles

Programación Funcional Haskell Clase 19

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

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades: La prueba es individual y sin material. La duración es 3 horas.

Más detalles

Estructura de Datos y de la Información

Estructura de Datos y de la Información Universidad Rey Juan Carlos Curso 2009/10 Ingeniería Técnica en Informática de Gestión Estructura de Datos y de la Información Examen Final Junio 2010 Fecha: 24-6-2010 Soluciones Ejercicio 1. (Puntuación

Más detalles

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

Más detalles

Programación Funcional

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

Más detalles

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Objetivos Trabajar con los tipos abstractos de datos Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Desarrollar y analizar

Más detalles

Lenguajes de Programación I

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

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

4. Operadores Operador asignación

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

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

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

Más detalles

Multiplicación de matrices simétricas

Multiplicación de matrices simétricas Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =

Más detalles

Tema 6: Estructuras de datos recursivas

Tema 6: Estructuras de datos recursivas Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura

Más detalles

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles

Tipos de Datos Recursivos

Tipos de Datos Recursivos 1/1 Tipos de Datos Recursivos Josefina Sierra Santibáñez 15 de mayo de 2018 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones), sino

Más detalles

Programación Básica. Martin Méndez Facultad de Ciencias Universidad Autónoma de San Luis Potosí

Programación Básica. Martin Méndez Facultad de Ciencias Universidad Autónoma de San Luis Potosí Programación Básica Martin Méndez Facultad de Ciencias Universidad Autónoma de San Luis Potosí Objetivo del Curso Estudiar y aplicar los conceptos básicos de programación estructurada en un lenguaje de

Más detalles

Introducción a la Programación Orientada a Objetos DCIC - UNS 2018

Introducción a la Programación Orientada a Objetos DCIC - UNS 2018 2018 EJERCICIO 1. Procesar un número natural N a. Dadas las siguientes definiciones: PRACTICO N 3 Diseño de algoritmos iterativos y planteos recursivos Patrones de algoritmos Implementación en Java o La

Más detalles

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

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

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Tema 6. Definiciones de tipos

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

Más detalles

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES TEMAS Recorrido de un árbol Máximo y mínimo Búsqueda de un elemento Borrado de un nodo 3 Características ARBOLES - CONCEPTOS Cada elemento del árbol

Más detalles

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas Programación 2 8 - TADs Colecciones Conjuntos, Diccionarios y Tablas 1 El TAD SET (Conjunto) En el diseño de algoritmos, la noción de conjunto es usada como base para la formulación de tipos de datos abstractos

Más detalles

Tipos de datos y clases de tipos

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

Más detalles

Tema 6: Memoria dinámica

Tema 6: Memoria dinámica : Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0

Más detalles

Tema 2. Tipos y Estructuras Básicas

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

Más detalles

Arreglos y Subrangos

Arreglos y Subrangos Arreglos y Subrangos Programación 1 InCo - FING Contents 1 Tipo subrango 2 1.1 Subrangos de enteros......................... 2 1.2 Subrangos de caracteres....................... 2 1.3 Operaciones con subrangos.....................

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota: Nombre y apellidos: Nota: NOTA FINAL: Nota Practica (1 punto) + Nota Examen (9 punto) Es indispensable aprobar el examen (4,5 puntos) para aprobar la asignatura (5 puntos) La práctica es opcional Duración:

Más detalles

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

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

Más detalles

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

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

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. Ejercicios Resueltos del Práctico 4 Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. 1 2 struct NodoLista { 3 int elem ; 4 NodoLista * sig ;

Más detalles

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 2) 2007 1 Derivaciones El proceso de búsqueda de un árbol sintáctico para una cadena se llama análisis sintáctico. El lenguaje generado

Más detalles

11 EJEMPLOS DE PROGRAMAS OCAML

11 EJEMPLOS DE PROGRAMAS OCAML 11 EJEMPLOS DE PROGRAMAS OCAML En esta sección ilustraremos los conceptos presentados hasta ahora, con dos aplicaciones desarrolladas en Ocaml. La primera aplicación es una calculadora implementada como

Más detalles

Funciones II. Fundamentos de Programación Fundamentos de Programación I

Funciones II. Fundamentos de Programación Fundamentos de Programación I Funciones II Fundamentos de Programación Fundamentos de Programación I Ejercicio 1: Escribe una función que transforme un punto en coordenadas polares a cartesianas Entradas: Un punto como coordenadas

Más detalles

Introducción a la programación. Cecilia Manzino

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

Más detalles

Algoritmos y Estructuras de Datos II

Algoritmos y Estructuras de Datos II 27 de mayo de 2013 Clase de hoy 1 Repaso Divide y vencerás Algoritmos voraces 2 3 Divide y vencerás Algoritmos voraces Repaso cómo vs. qué 3 partes 1 análisis de algoritmos 2 tipos de datos 3 técnicas

Más detalles

Curso de Java Introducción a la Programación II

Curso de Java Introducción a la Programación II Curso de Java Introducción a la Programación II Jaime Fernández Martín Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Tipos Java 2 Decalaración de variables 3 Operadores aritméticos Índice

Más detalles

MEL* Ejercicios - Inducción 1

MEL* Ejercicios - Inducción 1 Ejercicios 8. Teo: Principio del Buen Orden Principio de inducción. ( ) Supóngase el Principio del Buen Orden. Sea p un predicado sobre nat tal que p.0 y ( n:nat : p.n p(n+)}. Se quiere demostrar que también

Más detalles

Cómo implementar tus propias funciones en Lenguaje C?

Cómo implementar tus propias funciones en Lenguaje C? Cómo implementar tus propias funciones en Lenguaje C? por Iván Cruz Cuando se realiza un programa, es importante siempre manejar una buena organización del código fuente, debido a que se puede desear incrementar

Más detalles

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS Programación en Fortran Valentín Moreno ÍNDICE 1. Subprogramas 2. Funciones 3. Subrutinas 2 3 1. SUBPROGRAMAS 1. SUBPROGRAMAS Si necesitamos usar con frecuencia

Más detalles

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

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

Más detalles

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

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

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

Más detalles