9 DECLARACIÓN DE TIPOS Y PATRONES
|
|
- Alberto Revuelta Saavedra
- hace 5 años
- Vistas:
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 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 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 detallesTipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Más detallesParadigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)
Más 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 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 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 detallesMetodologías de Programación II Introducción
Metodologías de Programación II Introducción Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra Maestría
Más detallesEn 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 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 detallesMetodologí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 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 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 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 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 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 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 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 detallesParadigmas 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 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 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 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 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 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 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 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 detallesTema 3: Tipos y clases
Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases
Más detallesTema 3: Tipos y clases
Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases
Más 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 detallesApunte Laboratorio ALPI - El lenguaje de programación Pascal
Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................
Más detallesTema 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 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 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 detallesProcesadores 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 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 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 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 detallesLenguajes 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 detallesProcesadores 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 detallesProcedimientos 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 detallesTipos 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 Á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 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 detallesArreglos 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 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 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 detallesPROCESADORES 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 detallesAnálisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas
Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático v1.2 c 2005 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado
Más detallesPattern matching + Tipos enumerados
Pattern matching + Tipos enumerados Taller de Álgebra I Verano 2017 Pattern matching Pattern matching El pattern matching es un mecanismo que nos permite asociar una definición de una función solo a ciertos
Más 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 detallesEl 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 detallesIntroducció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 detallesVerificació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 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 detallesAPUNTADORES. 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 detallesInstituto 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 detallesEstructura 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 detallesDatos 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 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 detallesProgramació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 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 detallesPrincipios 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 detalles4. Operadores Operador asignación
Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre
Más detallesProcesadores de lenguaje Tema 5 Comprobación de tipos
Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,
Más detallesMultiplicació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 detallesTema 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 detallesConstantes. 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 detallesTipos 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 detallesProgramació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 detallesIntroducció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 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 detallesAlgoritmos 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 detallesTema 6. Definiciones de tipos
Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 6. Definiciones de tipos 6.1 Sinónimos de tipo 6.2 Definiciones de tipos de datos Tipos enumerados
Más detallesARBOLES 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 detallesProgramació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 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 detallesTema 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 detallesTema 2. Tipos y Estructuras Básicas
Tema 2. Tipos y Estructuras Básicas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de
Más detallesArreglos 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 detallesESTRUCTURA 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 detallesAnálisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas
Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado
Más 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 detallesProgramació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 detallesEjercicio 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 detallesLenguajes 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 detalles11 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 detallesFunciones 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 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 detallesAlgoritmos 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 detallesCurso 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 detallesMEL* 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 detallesCó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 detallesLENGUAJE 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 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 detallesManual 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 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 detalles