You are on page 1of 6
42_ALGORHVNCA DISERO Y ANALII DE ALGORMMOS FUNCIONAL BS E NOERATIVOS ‘nombre de tipo es un identificador 0 un identificadorseguido de varias La segunda declaraci6n describe un tipo genérico LISTA, que puede contener valores eualesquier, aunque todos del mismo tipo. Un tipo genério en realidad representa un conjunio de tipas de datos que la vatiable de tipo , COLOR, LISTA (BOOLEAN), etc, respectivament, Los tipos genéricos también se aman polimérfi “miples formas"), en contraposicin alos tipos eoncretos, monombficos. Hay muchas formas de realizar una declaracin de tipo, Pero todas ellas (CAPETULO 2: ESPECIFICACION DE ALGORIIMOS PINCIDNALES Tipo sinénimo Esta declaraci6n permite dar otro nombre a un tipo ya defindo. Su formato: TYPE -> Es obyio que el nuevo tipo tiene el mismo conjunto de valores que el tipo criginal y que se conservan las operaciones definidas sobre és, ‘Tipo tupla ‘Una upla es una coleccién de un mt pos cualesquiera. Dependiendo de qu se habla respectivamente de pares, Un tipo tupla se declara escribiendo los ipo de los valores constitayentes centre paréntesis y separados por comas. Es decir, su formato TYPE nombre de tipo> > (-, .., ) Por ejemplo, veamos una declaraciéa de un tipo tera y un tipo par FECHA -> (INTEGER, INTEGER, mWP=GER), FRECUENCIA (elemento) > (elemento, iNTBSER) {osueuete) <- (oruswets) ounnewo> “(SGSGENT) (<= SOwauRG HO ENOD ean sopdurofo 204 “saaeqt ‘anuo sowomaya sus op odn [9 opuvsusoue wre[Dep a omunfuos od U7 fe HIQuOS9 owoureanaprETS opanosut $2 ‘Hep 50 ‘sopnadax sowsourate uo esiquoss apond ow ord (eet= (eu) :ioop 6 ‘sonoma sus ap uaprO To FerquIED op saITEyRsA! ‘se:oTEu SEO 2p ssgqunseopond opanas 1g -o9eA ovunfto fo wiuasasdas orotuEd Ts epuop arew 0 Hos so1unfuos op sojdurafey “saavy] anus meuyou9 {2 sojmeurjp sns onb oxdaox9 ‘wsjoq wim OUIoD aquose 28 omtmfuos UT ‘sopeuoroesado sey ua ow09 souofrpuca woo seuotseotToedss sey Uo Ortre) S2[HN UOS soIUn{toD £07 “sopnedar sso uapond ou ‘sesjoq se] 9p wIDUOTONP w ‘onb oxed ‘Js anu9 oAelal wapro upSuq is & odn outst jop soquaUID[> 9p UpTD99[09 BUN $9 ofMnfLoD UL “ouwsjoog un & oxi ‘un sod sopranos sammd 2p sesjoq ap uprovrerzep wun so odn ownIM 1g <(naloog "yaosuNT) > <-_ss¥vaTac"yst08 "Qeiowa> <= svitowd—aa_veres ‘ <~ sONEuNE-Bd-VSIOR stlos sesjoq ap sodp ap soyéwiafz <<, .>, <- BaAL cou0} asaya szsun oF oop ssn sroagued ann wsoq | ap SOTIDIS S01 9p ada y> opuaquoss aout 96 jog oda un ap UPPERIDIP OT SLC ete > ond > | ... | Cada expresién es tipo o una tupla de tipos. Maman constructores Una constante Se representa. como un simbolo. Un constructor no constante afecta a uno © varios tipos, que deben ‘estar ya definidos o ser el propio tipo suma que se est definiendo. Es decir, una ‘expresin tiene el formato: ° ° - ( , .., ) Por ejemplo: wee LISTA (el tons (elemento, LISTA (elesento}) una lista polimérfica, bien como 1s lista vacia, denotada ‘como una lista con un elemento como minimo, que est Ja cual se encuentra el resto de Ia lista. Aungue en este capftulo se incluyen ms ejemplos que involucran a listas, en Ia leccién 42 se ‘ratan con més detalle. EL tipo LISTA sirve par iustar un ejemplo de un tipo que se define en ‘téminos de s{ mismo. Una declaracién en la que el objeto que se ext eclarando aperece en la definicién se llama declaracién recursive: por tax, les tipos summa permiten define tipas recursivos. ALGORFTMICA, DISERO Y ANALISIS DE ALGORITMOS FUNCIONALES E IMPERATIVOS. La construccién de wn valor den tipo suma es. cconstante: simplemente se escribe dicha constante. Por ejemplo, para constvir 1a Hista vaca, se escribe ‘no constantes es més complicado, ya qu aplica es otto valor del mismo tipo suma, Por ejemplo, una lista de enteros formada por un cinco y un cero se escribirie: cons (5, Cons (0, (00) Pero hay un riesgo con los tipos recursivos: que nunca se termine de escribir un valor del tipo, Este peligro se evita obligando a que alguna smplo anterior, Ses la cabeza de otra la cabeza de ora lista, que al se la constant Ia Fista vaefa, hace que el proceso recursivo termine. Peden distinguirse les distintas alternativas ée un tipo suma, asf como seleccionarse valores incluidos en un valor construdo, utlizando 1a operacién funcional de ajuste de patrones sobre los constructores del tipo. (Esta operacién se ve en el apariado 2.4.3.) soma son un método potente para especificar valores complejo. Por ejemplo, puede toma:se el convenio de que tna lista se escriba como aa secvencia Je Tos_valores consnuyes,eneerados ene cores se aplica Cons a él mismo anterior puede escribirse como: 1 ——eeeeeee OAL SORTTMOS FUNCIONALES 49 Esta acci6n de escribir unas expresiones mds sencillas de Jas que habrfa que escribir si se fuera esticto se denomina endulzamiento sintdctico. Ea ldgica, ya que cualquier expresin aritmética o 16gica deberfa estar Hena de paré escribirse como 1 + 2 * 3 porque se adopta el corvenio de dar més 2 Ja multiplicacion que a ta sama, Tipo enumerado Un tipo enumerado no es realmente una nueva clase de tipo sino un caso articulat del tipo suma, que s6lo esté formado por valores constantes, Es deca su formato es: TYPE < -> | ... | Por ejemplo: ©'"cooR => Bianco | Negro | Rojo | Azul | verde 1Los tipos enumerados tienen tres operaciones predefinidas, que 8 la posicién relativa que ocupan los distintos valores del tipo en la de + Suc (v) halla et sucesor del valor v; es decir, el valor qu 1 su derecha en Ia declaraci6n del tipo. No estd definido el sucesor éel, valor escrito més a la derecha, + Pred (v) halla el predecesor del valor v; es decir, se define de mane: similar a Suc, haciendo referencia al valor escrito inmediatamente Ja izquierda. Tampoco esté definido el predecescr del valor mAs a la izquierda, Ord (») be que el ordinal de Ia primera constante es igual a Lao eE SSE CLEC RUNCIONALES E DAPERATIVOS. Puesto que la posicién en su declaracién de los valores de un tipo ‘enumerado define un orden entre éstos, tambign pueden usarse las relaciones: Por especificado: ‘Suc (Blanco) = Negro ¥y Ord con caractere tipo predefinido considerarse como un tipo suma recursivo, onde cada entero es cero, el sucesor de otro entero no negative o el predecedor de otro entero no positivo, ‘Tipo subrango Un tipo subrango se parece a un tio sinénimo en que permite dar otro nombre a valores de un tipo ya exisente. Sin embargo, esta vez el tipo declarado engloba slo a un subconjunto de los valores del tipo original. Este se llama tipo de bare dt tipo subrango. tipo subrango no es imprescindble pero resulta til para especificar los ‘manera més precisa, porque expresa que los céleulos se van a erto subconjunto del tipo de datos original. Hay que asegurarse de algoritmo no necesita ningsn valor del tipo de base no incluido en el tipo ssubrango. Esta situaciGn es el eror cometido més frecuentemente al usar tipos subrangos. ‘Un tipo subrango contiene el margen de valores consecutivos de un tipo enumerado o del tipo INTEGER comprendidos entre un valor inferior y un valor superior, ambos incluides. La sintaxis usada para la declaraciéa de un tipo subrango es: CAPITULO 2: ESPECIPICACION DE ALGORITMOS FUNCIONALES 51 TYPE -> 0..9 También puede idearse una representacién con tipos subrango del tipo tupla FECHA que sea més restringida que la dada previamente, pero més adaptada al uso que se espera hacer: vee FECHA -> (1..31, 1..12, mTEGER) Sobre un tipo subrango estén definides todas las operaciones del tipo de base. ‘Tipo funcional funcional es un tipo cuyos valores son funciones, De esta forma, definir funciones que tomen funciones como argumentos o que devuelvan funciones como resultados. Las funciones que no manipulan otras funciones se Ilaman funciones de primer orden, y las que s{ lo hacen, funciones de orden superior. La introduccién del tipo funcional, y¢ onden superior, fade poteneia expresiva funciones de primer orden, pero a veces resulta convenient usar fanciones de ‘orden superior para algiin problema; por éjemplo, pera algunss representaciones de grafos valorados. Un tipo funcional se declara indicando resultado de las funciones que agrupa. Su f e los parémetros y del $2__ALGORFTMICA. DISERO Y ANALISIS DE ALOORITMOS FUNCIONALES E IMPERATIVOS: TYPE s > FUNC (): Por ejemplo: erecen) : inveceR, LESIACeLenento} las fanciones binaias que transformsn ter0; dos valores funcionales petenecionts aes

You might also like