Programación declarativa

20
  Programación Lógica y Funcional Profesor: Ing. Armando Aragón López Alumno: Jimenez Sibaja Jairo Osman Trabajo: Tipos de Programación y Datos OAXACA DE JUÁREZ, OAX. 01 DE OCTUBRE DE 2013

description

Programación Declarativa

Transcript of Programación declarativa

  • Programacin Lgica y Funcional

    Profesor:

    Ing. Armando Aragn Lpez

    Alumno:

    Jimenez Sibaja Jairo Osman

    Trabajo:

    Tipos de Programacin y Datos

    OAXACA DE JUREZ, OAX. 01 DE OCTUBRE DE 2013

  • Programacin declarativa

    La Programacin Declarativa, en contraposicin a la programacin imperativa es un paradigma de programacin que est basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solucin. La solucin es obtenida mediante mecanismos internos de control, sin especificar exactamente cmo encontrarla (tan slo se le indica a la computadora qu es lo que se desea obtener o qu es lo que se est buscando). No existen asignaciones destructivas, y las variables son utilizadas con Transparencia referencial

    Diferencia entre imperativo y declarativo

    En la programacin imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solucin, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar el problema.

    En la programacin declarativa las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto ltimo se realizar mediante mecanismos internos de inferencia de informacin a partir de la descripcin realizada.

    Tipos

    Existen varios tipos de lenguajes declarativos:

    Los lenguajes lgicos, como Prolog. Los lenguajes algebraicos, como Maude y SQL Los lenguajes funcionales, como Haskell

    Ventajas

    Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemticamente, lo que permite el uso de mecanismos matemticos para optimizar el rendimiento de los programas.

    Elegancia, claridad, sencillez, potencia y concisin. Semnticas claras, simples y matemticamente bien fundadas. Cercanos al nivel de abstraccin de las especificaciones formales/informales de los

    problemas a resolver. Referencialmente transparentes: Comportamiento matemtico adecuado que

    permite razonar sobre los programas. Soportan tcnicas muy avanzadas de desarrollo, mantenimiento y validacin de

    programas. Altas dosis de paralelismo implcito. Aplicaciones variadas y de gran inters. Son fiables, elegantes y expresivos.

  • Caractersticas

    La Programacin Declarativa, en contraposicin a la Programacin Imperativa es un paradigma de programacin que est basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solucin.

    La solucin es obtenida mediante mecanismos internos de control, sin especificar exactamente cmo encontrarla (tan slo se le indica a la computadora que es lo que se desea obtener o que es lo que se est buscando). No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial

    Aunque en la Programacin Declarativa cabe ms de un paradigma de programacin, se ha optado por centrarla en el estudio de la denominada Programacin Lgica, el cual est basado en el clculo de proposiciones y sus relaciones lgicas.

    La programacin declarativa es un estilo de programacin en el que el programador especifica qu debe computarse ms bien que cmo deben realizarse los cmputos.

    "programa = lgica + control" (Kowalski) "algoritmos + estructuras de datos = programas" (Wirth)

    El componente lgico determina el significado del programa mientras que el ncomponente de control solamente afecta a su eficiencia.

    La tarea de programar consiste en centrar la atencin en la lgica dejando de lado el control, que se asume automtico, al sistema.

    La caracterstica fundamental de la programacin declarativa es el uso de la lgica como lenguaje de programacin:

    Un programa es una teora formal en una cierta lgica, esto es, un conjunto de frmulas lgicas que resultan ser la especificacin del problema que se pretende resolver, y

    la computacin se entiende como una forma de inferencia o deduccin en dicha lgica. Los principales requisitos que debe cumplir la lgica empleada son:

    Disponer de un lenguaje que sea suficientemente expresivo. Disponer de una semntica operacional (un mecanismo de cmputo que permita

    ejecutar los programas). Disponer de una semntica declarativa que permita dar un significado a los

    programas de forma independiente a su posible ejecucin.

  • Programacin lgica

    La programacin lgica es un tipo de paradigmas de programacin dentro del paradigma de programacin declarativa. La programacin funcional se basa en el concepto de funcin (que no es ms que una evolucin de los predicados), de corte ms matemtico. La programacin lgica gira en torno al concepto de predicado, o relacin entre elementos.

    Motivacin

    Histricamente, los ordenadores se han programado utilizando lenguajes muy cercanos a

    las peculiaridades de la propia mquina: operaciones aritmticas simples, instrucciones de

    acceso a memoria, etc. Un programa escrito de esta manera puede ocultar totalmente su

    propsito a la comprensin de un ser humano, incluso uno entrenado. Hoy da, estos

    lenguajes pertenecientes al paradigma de la Programacin imperativa han evolucionado de

    manera que ya no son tan crpticos.

    En cambio, la lgica matemtica es la manera ms sencilla, para el intelecto humano, de

    expresar formalmente problemas complejos y de resolverlos mediante la aplicacin de

    reglas, hiptesis y teoremas. De ah que el concepto de "programacin lgica" resulte

    atractivo en diversos campos donde la programacin tradicional es un fracaso.

    Campos de aplicacin

    La programacin lgica encuentra su hbitat natural en aplicaciones de inteligencia artificial

    o relacionada: Sistemas expertos, donde un sistema de informacin imita las

    recomendaciones de un experto sobre algn dominio de conocimiento.

    Su principal uso se basa en las aplicaciones de inteligencia artificial o similar.

    Demostracin automtica de teoremas, donde un programa genera nuevos teoremas

    sobre una teora existente.

    Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con

    limitaciones) la informacin contenida en una expresin lingstica humana.

    Etc.

    La programacin lgica tambin se utiliza en aplicaciones ms "mundanas" pero de manera

    muy limitada, ya que la programacin tradicional es ms adecuada a tareas de propsito

    general.

    Fundamentos

    La mayora de los lenguajes de programacin lgica se basan en la teora lgica de primer

    orden, aunque tambin incorporan algunos comportamientos de orden superior como

    la lgica difusa. En este sentido, destacan los lenguajes funcionales, ya que se basan en

  • el clculo lambda, que es la nica teora lgica de orden superior que es

    demostradamente computable (hasta el momento).

    En qu consiste (ejemplo)

    La programacin lgica permite formalizar hechos del mundo real, por ejemplo:

    las aves vuelan

    los pinginos no vuelan

    "pichurri" es un ave

    "sandokan" es un perro

    "alegra" es un ave

    y tambin reglas o restricciones:

    una mascota vuela si es un ave y no es un pingino

    Ante dicho "programa" es posible establecer hiptesis que no son ms que preguntas o

    incgnitas, por ejemplo:

    "pichurri" vuela ?

    qu mascotas vuelan ?....

    Gracias a que la lgica de primer orden es computable, el ordenador ser capaz de verificar

    la hiptesis, es decir, responder a las incgnitas:

    Es cierto que "pichurri" vuela.

    "pichurri" y "alegra" vuelan.

    Obsrvese que el programa lgico no solamente es capaz de responder si una determinada

    hiptesis es verdadera o falsa. Tambin es capaz de determinar que valores de la incgnita

    hacen cierta la hiptesis.

    Este ejemplo es claramente acadmico. Sin embargo, consideremos el siguiente ejemplo:

    el sistema de control de semforos de una ciudad.

    El estado de cada uno de los semforos (verde, rojo o mbar) constituye los hechos del

    mundo real. El programa en s consiste en unas pocas reglas de sentido comn:

    determinados semforos no pueden permanecer simultneamente en verde, un semforo

    solamente puede transitar de verde a mbar y de mbar a rojo, etc. La hiptesis es el estado

    en el que deberan estar cada uno de los semforos en el siguiente instante de tiempo.

    ste es un ejemplo imposible de resolver mediante programacin tradicional, ya que la

    lgica subyacente al comportamiento de los semforos en su conjunto queda enmascarada

    por simples rdenes imperativas del tipo "cambiar color de tal o cual semforo".

  • Programacin funcional

    En ciencias de la computacin, la programacin funcional es un paradigma de programacin declarativa basado en la utilizacin de funciones aritmticas que no maneja datos mutables o de estado. Enfatiza la aplicacin de funciones, en contraste con el estilo de programacin imperativa, que enfatiza los cambios de estado. La programacin funcional tiene sus races en el clculo lambda, un sistema formal desarrollado en los 1930s para investigar la definicin de funcin, la aplicacin de las funciones y la recursin. Muchos lenguajes de programacin funcionales pueden ser vistos como elaboraciones del clculo lambda.

    En la prctica, la diferencia entre una funcin matemtica y la nocin de una "funcin" utilizada en la programacin imperativa es que las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de clculos realizados previamente. Por esta razn carecen de transparencia referencial, es decir, la misma expresin sintctica puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. Con cdigo funcional, en contraste, el valor generado por una funcin depende exclusivamente de los argumentos alimentados a la funcin. Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho ms fcilmente, y esta es una de las principales motivaciones para utilizar la programacin funcional.

    Caractersticas

    Los programas escritos en un lenguaje funcional estn constituidos nicamente por definiciones de funciones, entendiendo stas no como subprogramas clsicos de un lenguaje imperativo, sino como funciones puramente matemticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresin depende nicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos colaterales.

    Otras caractersticas propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteracin (lo que obliga en la prctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).

    Existen dos grandes categoras de lenguajes funcionales: los funcionales puros y los hbridos. La diferencia entre ambos estriba en que los lenguajes funcionales hbridos son menos dogmticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignacin de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional hbrido.

    Ventajas de usar un paradigma funcional

  • Entre las ventajas que suelen citarse de usar un paradigma funcional en la programacin de computadoras, estn las siguientes:

    Ausencia de efectos colaterales Proceso de depuracin menos problemtico Pruebas de unidades ms confiables Mayor facilidad para la ejecucin concurrente

    Lenguajes funcionales

    Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los lenguajes funcionales hbridos ms conocidos son Scala, Lisp, Scheme, Ocaml, SAP y Standard ML (estos dos ltimos, descendientes del lenguaje ML). Erlang es otro lenguaje funcional de programacin concurrente. Mathematica permite la programacin en mltiples estilos, pero promueve la programacin funcional. R tambin es un lenguaje funcional dedicado a la estadstica.2 Recientemente Microsoft Research est trabajando en el lenguaje F# (Functional#).

    Lenguaje de programacin multiparadigma

    Un lenguaje de programacin multiparadigma es el cual soporta ms de un paradigma de programacin. Segn lo describe Bjarne Stroustrup, permiten crear programas usando ms de un estilo de programacin.

    El objetivo en el diseo de estos lenguajes es permitir a los programadores utilizar el mejor paradigma para cada trabajo, admitiendo que ninguno resuelve todos los problemas de la forma ms fcil y eficiente posible.

    Por ejemplo, lenguajes de programacin como C++, Genie, Delphi, Visual Basic o PHP, combinan el paradigma imperativo con la orientacin a objetos. Incluso existen lenguajes multiparadigma que permiten la mezcla de forma natural, como en el caso de Oz, que tiene subconjuntos (particularidad de los lenguages lgicos), y otras caractersticas propias de lenguages de programacin funcional y de orientacin a objetos. Otro ejemplo son los lenguajes como Scheme (paradigma funcional) o Prolog (paradigma lgico), que cuentan con estructuras repetitivas, propias del paradigma imperativo.

  • Tipo de dato

    Tipo de dato informtico es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qu valores pueden tomar y qu operaciones se pueden realizar. Tipos de datos comunes son: enteros, nmeros de coma flotante (decimales), cadenas alfanumricas, fechas, horas, colores, etc.

    Por ejemplo, por lo general el tipo "int" representa un conjunto de enteros de 32 bits cuyo rango va desde el -2.147.483.648 al 2.147.483.647, as como las operaciones que se pueden realizar con los enteros, como son la suma, la resta, y la multiplicacin. Los colores, por su parte, se representan como tres bytes denotando la cantidad de rojo, verde y azul, y una cadena de caracteres representando el nombre del color; las operaciones permitidas en este caso incluyen la adicin y la sustraccin, pero no la multiplicacin.

    ste es un concepto propio de la informtica, ms especficamente de los lenguajes de programacin, aunque tambin se encuentra relacionado con nociones similares de la matemtica y la lgica.

    En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores. Casi todos los lenguajes de programacin explcitamente incluyen la notacin del tipo de datos, aunque lenguajes diferentes pueden usar terminologas diferentes. La mayor parte de los lenguajes de programacin permiten al programador definir tipos de datos adicionales, normalmente combinando mltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especfica que el dato interpretado como Persona incluir, por ejemplo, un nombre y una fecha de nacimiento.

    Un tipo de dato puede ser tambin visto como una limitacin impuesta en la interpretacin de los datos en un sistema de tipificacin, describiendo la representacin, la interpretacin y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipificacin usa informacin de los tipos de datos para comprobar la verificacin de los programas que acceden o manipulan los datos.

    TIPOS DE DATOS COMPUESTOS

    Un tipo compuesto no es ms que un tipo de datos que es capaz de almacenar una

    informacin.

  • Arrays

    Los arrays quizs sean la forma ms simple de tipos de datos compuestos.

    Un array es una coleccin ordenada de elementos de un mismo tipo de datos, agrupados

    de forma consecutiva en memoria. Cada elemento del array tiene asociado un ndice, que

    no es ms que un nmero natural que lo identifica inequvocamente y permite al

    programador acceder a l.

    Estructuras

    Una estructura (struct) es un tipo de datos compuesto que agrupa un conjunto de tipos de

    datos (no necesariamente iguales) en un nico tipo.

    La anterior definicin, que en un principio se nos puede antojar oscura, oculta un concepto

    realmente simple, que vamos a explicar mediante el siguiente ejemplo: supongamos que

    estamos escribiendo un software de gestin de miembros de asociaciones universitarias.

    Obviamente necesitaremos almacenar y manipular datos sobre personas, tales como

    nombre, DNI, edad, etc. Podramos aproximarnos al problema declarando estas variables

    por separado en nuestro programa:

    Uniones

    Una unin es un tipo de datos compuesto que puede almacenar valores de diferentes tipos,

    aunque no a la vez.

    Las uniones (unions) tienen un cometido parecido a las estructuras, esto es, agrupar en

    una sola variable varios valores. Sin embargo, al contrario que las estructuras, las uniones

    slo pueden guardar un valor a la vez. Esto significa que si asignamos valor a uno de los

    componentes de una variable unin, los dems componentes dejarn de tener un valor

    asignado.

    TIPOS DE DATOS ABSTRACTOS

    Un tipo de datos definido por el programador se denomina tipo abstracto de datos (TAD)

    para distinguirlo de los tipos predefinidos de datos. Los tipos abstractos de datos estn

    formados por los datos (estructuras de datos) y las operaciones (procedimientos o

    funciones) que se realizan sobre esos datos. El conjunto de operaciones definidas sobre el

    TAD debe ser cerrado, es decir, slo se debe acceder a los datos mediante las operaciones

    abstractas definidas sobre ellos. La abstraccin de datos slo permite acceder a ellos de

    manera controlada.

    Las principales ventajas que nos aportan los TAD son las siguientes:

    Mejoran la conceptualizacin y hacen ms claro y comprensible el cdigo.

  • Hacen que el sistema sea ms robusto.

    Reducen el tiempo de compilacin.

    Permiten modificar la implementacin sin que afecte al interfaz pblico.

    Facilitan la extensibilidad.

    TIPO PUNTERO Y REFERENCIA

    Una variable contiene un valor especfico, un puntero lo que contiene es la direccin de la

    variable que contiene el valor especfico. Estas direcciones se expresan por medio de un

    nmero cuyo valor cobra sentido cuando se expresa en el sistema hexadecimal. Los

    punteros tienen la caracterstica de ocupar solamente 4 bytes de memoria

    independientemente del tamao del tipo de dato al que apunten, por lo que su utilizacin

    hace a los programas ms eficientes.

    Una referencia es una especie de alias o "alter ego" del objeto. Es un recurso para pasar

    argumentos a funciones permitiendo que los argumentos no sean simples variables locales

    de la funcin, sino objetos del mbito que realiza la invocacin, lo que permite que la funcin

    pueda modificar objetos externos a ella.

    TIPO DE DATO ALGEBRAICO

    En matemticas discretas es usual introducir definiciones de estructuras recursivas dando

    los casos de definicin y un axioma de clausura indicando que ninguna otra cosa forma

    parte de lo definido.

    Por ejemplo, los rboles con informacin en los nodos pueden definirse como sigue:

    Sea T un conjunto. Los rboles con informacin en los nodos son todos los valores que se

    pueden construir con las reglas siguientes.

    El rbol vaco es un rbol y es representado con la constante AVacio.

    Si y son rboles, y x es un elemento de T, entonces Nodo( ,x, ) es un rbol.

    TIPO DE DATO OBJETO

    Un objeto se define como una estructura que encapsula atributos (caractersticas) y

    comportamientos (procedimientos) de una entidad con un papel bien definido en una

    aplicacin.

    Un objeto es sencillamente un tipo abstracto de datos al que se aaden importantes

    inovaciones en comparticion de cdigo y reutilizacion. Los mecanismos bsicos de

  • orientacion a objetos son: objetos, mensajes y mtodos, clases e instancias y herencia.

    Cada objeto tiene:

    - Estado: Conjunto de valores de los atributos en un instante de tiempo dado. El

    comportamiento de un objeto puede modificar el estado de este.

    - Comportamiento: Relacionado con su funcionalidad y determina las operaciones que este

    puede realizar o a las que puede responder ante mensajes enviados por otros objetos.

    - Identidad: Es la propiedad que permite a un objeto diferenciarse de otros. Generalmente

    esta propiedad es tal, que da nombre al objeto.

    La orientacion a objetos puede describirse como el conjunto de disciplinas que desarrollan

    y modelizan software que facilitan la construccion de sistemas complejos a partir de

    componentes.

    El atractivo intuitivo de la orientacion a objetos es que proporciona conceptos y

    herramientas con los cuales se modela y representa el mundo tan fielmente como sea

    posible. Las ventajas de la orientacion a objetos son muchas en programacion y modelacion

    de datos.

    TIPO DE DATO FUNCIN

    Funciones primitivas

    Describimos una serie de funciones como primitivas en el sentido de que estn definidas

    en la norma del lenguaje, para distinguirlas de las funciones creadas por el usuario a partir

    de aqullas. En LISP se llama a una funcin mediante la siguiente sintaxis:

    (NOMBREFUNCION ... )

    La suma de dos nmeros sera (+ 5 1)

    Para evaluarla LISP procede de la siguiente manera:

    a. Lee la expresin completa (+ 5 1)

    b. La interpreta como una llamada a una funcin y la identifica como SUMAR

    c. Interpreta 5 como primer argumento y 1 como segundo. El parntesis de cierre le indica

    que no hay ms argumentos.

    d. La funcin se evala para 5 y 1, devolviendo 6 como resultado, que a falta de otro

    destino es impreso en pantalla.

    Argumentos funcionales

    En LISP una funcin es adems un objeto de datos que puede ser suministrado a otra

    funcin como argumento. Esta posibilidad contribuye a la facilidad con que LISP se puede

  • adaptar a las necesidades de cualquier programa mediante la incorporacin de nuevas

    funciones que en su comportamiento resultan idnticas a las primitivas.

    Un programa que admite funciones como datos debe tambin suministrar alguna manera

    de invocarlas. Esto se logra en Visual LISP mediante la funcin APPLY.

    Funciones aritmticas bsicas

    Las funciones aritmticas que tienen como argumento un nmero devuelven distintos

    valores dependiendo de que el argumento proporcionado sea un nmero entero o real. Si

    todos los argumentos son enteros, el valor devuelto ser entero. Por el contrario, si alguno

    o todos los argumentos son reales, el valor devuelto ser un nmero real. Por ejemplo:

    (/ 12 5) devuelve 2, mientras que (/ 12.0 5) devuelve 2.4

    Los argumentos de una funcin aritmtica no son necesariamente nmeros. Cualquier otra

    funcin que devuelva un nmero como resultado es admisible como argumento de una

    funcin aritmtica. Ejemplo (* (+ 1 5)(- 20 10))

    Funciones bsicas de tratamiento de cadenas

    Para el tratamiento de cadenas tenemos funciones que permiten unificar cadenas

    diferentes, extraer subcadenas de una cadena mayor, determinar cuntos caracteres hay

    en una cadena y transformar los caracteres a maysculas o minsculas. El predicado

    WCMATCH permite determinar la semejanza de cadenas utiliando comodines.

    Funciones bsicas de acceso a listas

    Una lista es una manera de representar un conjunto de tomos y de otras listas. Una lista

    tiene la forma de un parntesis de apertura "(" seguido de una serie de tomos o listas,

    seguido por otro parntesis de cierre ")". De manera que cualquier cosa encerrada entre

    parntesis ser considerada una lista. Una lista pasada al evaluador LISP ser tratada

    como una expresin simblica (S-expresin), es decir, una llamada a funcin y se

    considerar el primer trmino de la lista como el nombre de la funcin. Para que una lista

    sea tratada como dato y no como una expresin simblica debe estar contenida en la forma

    especial QUOTE. Las funciones bsicas cuya comprensin es imprescindible para el

    acceso a la informacin contenida en listas se pueden reducir a cuatro: QUOTE, CAR, CDR,

    y NTH.

    Funciones de construccin de listas

    Con las funciones del epgrafe anterior podemos descomponer listas, accediendo a

    suscomponentes a distintos niveles de anidacin. Existen otras funciones que podemos

    utilizar para componer nuevas listas a base de elementos individuales, ya sean tomos u

    otras listas. CONS, LIST y APPEND son funciones que construyen listas por distintos

    procedimientos y con resultados diversos, por lo que es necesario distinguirlas bien.

  • TIPOS SIMPLES

    Como su nombre indica son los tipos bsicos. Son los ms sencillos y los ms fciles de

    aprender.

    Los tipos simples ms bsicos son: entero, lgico, carcter y real. Y la mayora de los

    lenguajes de programacin los soportan, no como ocurre con los estructurados que pueden

    variar de un lenguaje a otro.

    TIPOS ESTRUCTURADOS

    Mientras que una variable de un tipo simple slo referencia a un elemento, los estructurados

    se refieren a colecciones de elementos.

    Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy

    variadas: tenemos colecciones ordenadas que se representan mediante el tipo array,

    colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros

    tipos, son los llamados registros.

    TIPOS ORDINALES (O ESCALARES)

    Representan un conjunto finito y linealmente ordenado de valores. Un ejemplo sencillo sera

    el intervalo del conjunto de nmeros enteros entre el 0 y el 100. Cada valor que puede

    asignarse a un dato tiene una posicin en una serie ordenada. Por lo tanto, existe un primer

    y un ltimo valor y cada valor tiene uno que lo precede y otro que lo sigue. La funcin

    estndar de TurboPascal Ord devuelve el orden de cada valor en la serie (0, 1, 2, 3, 4,...),

    excepto para los valores de tipo entero que devuelve el propio nominal.

    TIPOS PREDEFINIDOS

    Estos tipos no hay que mencionarlos en la declaracin de tipos ya que estn predefinidos

    en el lenguaje TurboPascal.

    Enteros

    Los tipos enteros predefinidos son tipos escalares, es decir, los valores correspondientes

    estn ordenados. Hay varios tipos enteros que se diferencian en dos caractersticas: el

    espacio que ocupan en memoria y en el formato de codificacin. Estas dos caractersticas

    influyen, a su vez, en el intervalo de representacin.

  • Tipo Boolean

    El tipo de dato Boolean (booleano o lgico) puede tomar nicamente los valores lgicos

    False y True. Tiene un tamao de 1 byte

    Tipo Char

    Un dato de este tipo representa un valor del conjunto de los caracteres del cdigo estndar

    ASCII: caracteres alfabticos, dgitos numricos, signos de puntuacin y caracteres de

    control. Ocupan 1 byte (8 bits: 256 combinaciones diferentes = 256 caracteres en total).

    TIPOS DEFINIDOS POR EL USUARIO

    Son tipos de dato que no estn predefinidos por TurboPascal, siendo el propio programador

    el que se encarga de definirlos en la seccin de declaraciones de tipos de dato del

    programa. Se clasifican en enumerados y subrangos.

    Enumerados

    Al declararlo, se introduce un nuevo identifica dor para un tipo de dato, a la vez que, se

    define los valores o constantes del nuevo tipo dentro de un nmero reducido de alternativas

    (256 valores diferentes como mximo). Cada uno de estos posibles valores se convierte en

    un identificador de una constante literal del tipo enumerado. Para estos valores, no pueden

    utilizarse constantes que tengan otro uso o sean identificadores ya empleados. Como una

    de las consecuencias de esta norma, dos tipos enumerados diferentes no pueden compartir

    un mismo valor.

    Subrangos

    Un tipo subrango es un subconjunto de un tipo ordinal ya declarado por el programador

    previamente o predefinido en el lenguaje TurboPascal. Es decir, toman valores de cualquier

    subconjunto de valores definidos antes en un tipo ordinal (no vale, por ejemplo, un intervalo

    numrico real!) indicando su lmite inferior y su lmite superior. La nica limitacin a estos

    lmites la da el conjunto de valores correspondiente al tipo de dato en el que est incluido.

    TIPOS NO-ORDINALES

    Simplificando, podramos reducir los tipos simples no-ordinales al tipo real. Este tipo nos

    sirve para declarar variables que pueden tomar valores dentro del conjunto de los nmeros

    reales.

    A diferencia de los tipos ordinales, los no-ordinales no se pueden contar. No se puede

    establecer una relacin uno a uno entre ellos y los nmero naturales. Dicho de otra forma,

    para que un conjunto se considere ordinal se tiene que poder calcular la posicin, el anterior

    elemento y el siguiente de un elemento cualquiera del conjunto. Por ejemplo: Cul es el

    sucesor de 5.12? Ser 5.13, 5.120, 5.121 ...

  • Fuentes

    http://es.wikipedia.org/wiki/Programaci%C3%B3n_declarativa

    http://www.ecured.cu/index.php/Programaci%C3%B3n_Declarativa

    http://es.wikipedia.org/wiki/Programaci%C3%B3n_l%C3%B3gica

    http://users.dsic.upv.es/asignaturas/facultad/prg/prf.html

    http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_multiparadigma

    http://es.wikipedia.org/wiki/Tipo_de_dato#Tipo_puntero_y_referencia

    http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node74.html

    http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node77.html

    http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node82.html

    http://www.davidparedes.es/2009/01/02/tipos-abstractos-de-datos-tad/

    http://www.ecured.cu/index.php/Puntero_%28C%2B%2B%29

  • Programacin Lgica y Funcional

    Profesor:

    Ing. Armando Aragn Lpez

    Alumno:

    Jimenez Sibaja Jairo Osman

    Trabajo:

    Caractersticas de los Lenguajes de Programacin

    OAXACA DE JUREZ, OAX. 01 DE OCTUBRE DE 2013

  • Fortran

    Lenguaje de programacin de alto nivel

    Procedimental e imperativo

    Especialmente adoptado al clculo numrico y a la computacin cientfica

    Se utiliza para prediccin numrica del tiempo, anlisis de elementos finitos

    Es un lenguaje compacto.

    Cobol

    Es portable: su estndar no pertenece a ninguna marca concreta y puede ser llevado

    a todo tipo de mquinas.

    Tiene una gran facilidad de interpretacin y legibilidad.

    Tiene una rgida estructura jerrquica

    No tiene punteros, funciones ni tipos definidos por el usuario.

    Algol

    Incorpora ciclos, ya que hasta entonces los programas eran de estructura plana y

    secuencial.

    Portable de clculos cientficos

    Es un lenguaje minimalista, rpidamente implementado y distribuido

    Basic

    Diseado para permitir escribir programas usando terminales de tiempo compartido.

    Permite a los programadores ordenar y buscar a travs de lneas

    Permite que la informacin sea introducida con teclado.

    Prolog

    Est basado en lgica y programacin declarativa.

    Lenguaje de programacin orientada a metas.

    Se concentra ms en el conocimiento que en los algoritmos.

    Pascal

    El cdigo lo divide en porciones fcilmente legibles llamadas funciones o

    procedimientos.

    Est estructurado, fuertemente tipificado.

    Sus programas tienen definidos dos partes: declarativa y ejecutiva.

    Smalltalk

    Lenguaje orientado a objetos.

    Implementa la herencia simple y con raz comn.

    Alto grado de realizacin de cdigo.

  • Ada

    Sintaxis est inspirada en Pascal, por lo tanto es bastante legible.

    Le es indiferente el uso de maysculas y minsculas en los identificadores y

    palabras claves.

    Todo es el programa es nico procedimiento, que puede contener subprogramas.

    Modula-2

    Incorpora la modularidad y el encapsulamiento.

    Sus bibliotecas se organizan en mdulos.

    Para efectuar E/S se encuentra en mdulos de biblioteca.

    C++

    Cuenta con un conjunto complejo de instrucciones de control.

    Permite la agrupacin de instrucciones.

    Los argumentos de las funciones se transfieren por valores.

    Oberon

    Los mdulos con interfaces de tipo a cuadros y la compilacin separada.

    Operaciones con cadenas.

    Compatibilidad entre todos los tipos numricos.

    Eiffel

    Lenguaje orientado a objetos, adems de que usa la herencia.

    Utiliza la separacin de comandos de consulta, y el de eleccin nica.

    Cuenta con un gestor de memoria automtico.

    Programacin genrica con o sin restricciones.

    Java

    Sensible a maysculas y minsculas.

    Ignora los comentarios y espacios en blanco.

    Utiliza la herencia y los ciclos.

    Mercury

    Lenguaje lgico funcional basado en la programacin declarativa.

    Usa un sistema esttico de chequeo de tipos similares al haskell.

    Lenguaje puro basado en Prolog.

    Delphi

    Es la evolucin del clsico Pascal pero orientado a Objetos.

    Basado en componentes y eventos para proporcionar una interfaz.

    No distingue entre maysculas y minsculas.

  • Lisp

    Lenguaje multiparadigma y de alto nivel, homoiconico

    Sintaxis completamente entre parntesis.

    Basado en el clculos Lambda.

    Utiliza las estructuras de datos de rbol, almacenando automticamente.

    El cdigo del programa es escrito como expresiones entre parntesis.

    Scheme

    Sus estructuras de datos no son inmutable (impuro).

    Su filosofa es decididamente minimalista.

    Usa un ambiente esttico y lxico.

    Ofrece gestin automtica de memoria.

    Clos

    Dinmico dirigido a objetos.

    Las estructuras de los objetos se pueden modificar en tiempo de ejecucin.

    Permite herencia mltiple y resolucin mltiple.

    Iswin

    Incorpora componentes imperativos a un lenguaje aplicativo

    Extiende lenguajes aplicativos eager.

    Asume el conjunto de infinito de referencia.

    Haskell

    Incluye muchas de las ltimas innovaciones en el desarrollo de los lenguajes

    funcionales.

    Tratamiento semntico e la sobrecarga.

    Facilidad en la definicin de tipos abstractos de datos.

    Erlang

    Lenguaje de programacin concurrente incluye maquinas virtual y bibliotecas.

    Con evaluacin estricta, asignacin nica y tipado dinmico.

    Proporciona el cambio en caliente de cdigo.

    La creacin y gestin de procesos es trivial.

    Miranda

    Lenguaje de programacin funcional.

    Los argumentos se pasan a las funciones sin evaluar.

    Consiste en un conjunto de declaraciones de ecuaciones recursivas y datos de tipo

    algebraico.

    Es raro la necesidad de corchetes y no necesita terminaciones de instrucciones(;,

    endif).

  • Ml(Meta Lenguaje)

    Lenguaje multiparadigma: imperativo y funcional.

    Incluye evoluciones por valor, algebra de funciones, manejo automtico de memoria.

    Utiliza polimorfismo parame trizado, anlisis de estticos de tipos.

    Hope

    Escribe los programas como una notacin en forma de expresiones funcionales.

    Utiliza tipo de datos algebraicos y evaluacin call-by-patter.

    Utiliza polimorfismo y recursividad.

    Fuentes

    A history and description of programming lenguages volumen IV, from Jim Veitch

    Funtional and Logic Programming Languaje, ed Peter H. Salus

    Algol 68 Genie a GNU GPL Algol interpreter

    CommunLoops merging Lisp and object oriented Programming

    www.deficiones.com

    www.wikipedia.org