Técnicas básicas de programación Prolog
|
|
- Roberto Ramos Acuña
- hace 8 años
- Vistas:
Transcripción
1 Técnicas básicas de programación Prolog Programación Declarativa Pablo López 25 de octubre de Programación recursiva La recursión es una técnica fundamental en Prolog, tanto para representar los datos como para procesarlos. Esto se debe a que Prolog, como todos los lenguajes declarativos puros, carece de iteración. Aunque la programación recursiva es una técnica que nos resulta familiar, la recursión en Prolog exhibe ciertas particularidades que se apartan lo habitual. Por ejemplo, el caso base y el caso recursivo no tienen por qué ser excluyentes, lo que permite generar respuestas múltiples. Esta sección ilustra el empleo de la recursión en Prolog a través un ejemplo simple pero eficaz: la axiomatización de la aritmética de Peano. Los objetos a representar serán los números naturales {0, 1, 2, 3...} y las relaciones serán las operaciones aritméticas básicas: suma, resta, producto... Además de la recursión (de datos y código), introduciremos los conceptos de modo de un argumento, y uso, comportamiento y significado de un predicado. Ejemplo: Axiomatización de la aritmética de Peano El dominio de los naturales. inductivamente como sigue: El conjunto de los naturales N se define 1. 0 N [Caso Base] 2. si x N, entonces σ(x) N [Caso Recursivo] donde σ es la función sucesor σ : N N; es decir, σ(x) representa al sucesor de x. Las anteriores definiciones permiten construir el conjunto N partiendo del caso base (1), obteniendo nuevos elementos aplicando el caso recursivo (2): N = { 0 }{{} base, σ(0), σ(σ(0)), σ(σ(σ(0))),... }. } {{ } recursivo
2 T2.2 Técnicas básicas de programación Prolog Los naturales así definidos son recursivos: un natural mayor que 0 será de la forma σ(x); es decir, «contiene» otro natural x más pequeño que él. Por lo tanto, debemos encontrar una estructura de datos recursiva para representar los naturales. En la mayoría de los lenguajes imperativos la recursión de datos debe ser simulada mediante punteros o mecanismos similares. Por el contrario, la recursión de datos puede emplearse en Prolog de forma directa. En concreto, para representar los naturales en Prolog basta emplear términos Prolog recursivos que capturen la definición inductiva de N. El caso base de N nos asegura la existencia de un objeto concreto y único: el 0. Para representar este objeto en Prolog utilizaremos una constante c. El caso recursivo introduce una función σ : N N. La expresión σ(x) es un objeto compuesto que debe ser representado por una estructura de aridad 1. Tomaremos una estructura de functor s/1. Los naturales se representarán entonces por términos Prolog que se ajusten a la gramática G N : N ::= c [Caso Base] s(n) [Caso Recursivo] donde el functor s/1 es siempre aplicado a un término que representa un natural bien formado. Los siguientes son ejemplos de términos Prolog que representan naturales bien formados; es decir, que se ajustan a la gramática G N : c s(c) s(s((c))) s(s(s(c))) Un natural n N se representa aplicando n veces el functor s/1 a la constante c, lo que denotaremos de forma abreviada por s n (c). El programador no puede comunicar de ninguna forma a Prolog que tiene la intención de representar los naturales por términos que se ajusten a la gramática G N. Esto se debe a que Prolog carece de definiciones de tipos. Los siguientes son términos Prolog que no son naturales bien formados, pues el functor s/1 no siempre se aplica a un natural bien formado: s(s(f(c))) s(s(a)) Aunque no es posible restringir el functor s/1 de forma que siempre se aplique correctamente, sí podemos definir una relación es_natural/1 que se satisfaga cuando su único argumento sea un natural bien formado. El predicado es_natural/1 podría definirse extensionalmente (por enumeración de todos los casos):
3 Técnicas básicas de programación Prolog T2.3 es_natural(c). es_natural(s(c)). es_natural(s(s(c))).... El problema de esta definición es que deberíamos introducir un número infinito numerable de hechos para completarla. Parece más apropiado definir es_natural/1 intensionalmente, determinando las condiciones que debe cumplir un término Prolog para ser un natural bien formado. Basta razonar siguiendo la definición inductiva de N: 1. 0 N [Caso Base] El 0 es un elemento de N. Esto es cierto incondicionalmente, por lo que se traduce a Prolog el por hecho: es_natural(c). donde reemplazamos 0 por su representación Prolog, c. 2. si x N entonces σ(x) N [Caso Recursivo] Este enunciado incluye una condición y una conclusión, por lo que se traduce a Prolog por la regla: es_natural(s(x)):- es_natural(x). donde reemplazamos σ(x) por s(x). de donde obtenemos la definición: es_natural(s). es_natural(s(x)) :- es_natural(x). El predicado es_natural/1 así definido es una definición de dominio o tipo, pues define el conjunto de términos que representan un dominio (tipo) dado. Para comprobar el funcionamiento de es_natural/1, basta resolver el objetivo: :- es_natural(s(s(s(c)))). al que Prolog responderá afirmativamente. Por el contrario, Prolog responderá negativamente a los siguientes objetivos: :- es_natural(s(s(s(0)))). :- es_natural(s(f(s(0)))). También es posible plantear un objetivo donde aparezca una variable: :- es_natural(x).
4 T2.4 Técnicas básicas de programación Prolog es_natural(c). es_natural(s(x)):- es_natural(x). 1) es_natural(x) 1 - {X/c} 2 - {X/s(X1)} 2. éxito 3) es_natural(x1) {X/c} 1 - {X1/c} 2 - {X1/s(X2)} 4. éxito 5) es_natural(x2) {X/s(c)} 1 - {X2/c} 2 - {X2/s(X3)} 6. éxito {X/s(s(c))} 7) es_natural(x3)... Figura 1: Árbol de búsqueda del objetivo es_natural(x). Intuitivamente, estamos preguntando a Prolog si existe algún X tal que X es un natural bien formado. Obviamente, existen un número infinito numerable de términos X que son naturales bien formados, y vemos que Prolog los genera en orden creciente: :- es_natural(x). X= c; X= s(c); X= s(s(c));... La figura 1 muestra el árbol de búsqueda del objetivo es_natural(x). Puede apreciarse que la rama más a la derecha es infinita, por lo que el objetivo nunca termina. Además, cada respuesta computada se obtiene de forma progresiva, introduciendo variables (X i ) y sustituciones (X i /s(x i+1 )) intermedias. Para derivar o construir el natural n, basta descender n veces a la derecha (aplicando la regla recursiva) y descender finalmente a la izquierda (aplicando el caso base). Este comportamiento se debe a que al resolver los subobjetivos es_natural(x i ), el caso base y el caso recursivo no son excluyentes. Obtenemos un comportamiento similar si planteamos un objetivo con un argumento parcialmente instanciado: :- es_natural(s(s(x))). X= c; X= s(c); X= s(s(c));... Modo de un argumento. Los objetivos anteriores realizan funciones muy distintas a pesar de invocar al mismo procedimiento. La razón es que el
5 Técnicas básicas de programación Prolog T2.5 papel jugado por los argumentos pasados al procedimiento es diferente. Un argumento o parámetro actual de un procedimiento puede estar en dos modos: 1 Modo + el argumento no tiene variables libres o las variables que contiene no van a resultar instanciadas como resultado de la ejecución Modo - el argumento tiene variables libres que resultan instanciadas al ejecutar el procedimiento El argumento del objetivo es_natural(s(s(s(c)))) no contiene variables, por lo que está en modo +. Por el contrario, los argumentos de los objetivo es_natural(x) y es_natural(s(s(y))) contienen variables que resultan instanciadas en el proceso de resolución, por lo que están en modo -. Simplificando, podemos identificar el modo + con los parámetros de entrada y el modo - con los parámetros de salida y entrada/salida. En los lenguajes imperativos tradicionales, el que un parámetro sea de entrada o salida depende exclusivamente de cómo se defina el parámetro formal en la cabecera del procedimiento. Por el contrario, en Prolog, el que un parámetro sea de entrada o salida depende del propio parámetro actual y de cómo se defina el parámetro formal correspondiente en la cabecera del predicado. Esto es consecuencia de emplear la unificación como mecanismo para el paso de parámetros. Uso, comportamiento y significado de un predicado. Como hemos visto en el ejemplo anterior, un predicado puede comportarse de forma diferente e incluso no funcionar según el modo en que se encuentren sus parámetros actuales. Se llama uso de un predicado a la combinación de los modos de los parámetros actuales. Por ejemplo, el predicado es_natural tiene dos usos diferentes: es_natural(+) y es_natural(-), según su único argumento esté en modo + o -. Puesto que un parámetro puede estar en dos modos diferentes, un predicado con n argumentos puede tener hasta 2 n usos diferentes. La forma en que actúa un predicado para un uso concreto se denomina comportamiento. El comportamiento clasifica a los predicados según el número de respuestas que generan en test o generador. Un predicado se comporta como un test si la respuesta computada está vacía; es decir, no se instancia ninguna variable. Esto quiere decir que la única respuesta que se obtiene de un test es éxito o fracaso. Por ejemplo, el objetivo es_natural(s(s(c))) se comporta como un test, pues su único argumento está en modo +. El test corresponde siempre al uso en que 1 Estas definiciones de modo no se ajustan a las que aparecen en el estándar ISO de Prolog y no son completamente precisas. Para simplificar, nos ceñiremos a ellas a lo largo del curso.
6 T2.6 Técnicas básicas de programación Prolog todos los argumentos del predicado están en modo +, pues de lo contrario algún argumento resultaría instanciado y la respuesta computada no estaría vacía. Un predicado se comporta como un generador si las respuestas computadas no están vacías. Para ello, al menos un argumento debe estar en modo -. Según el número de respuestas computadas generadas, tendremos un generador único (una sola respuesta), acotado (un número finito de respuestas) o no acotado (infinitas respuestas). El objetivo es_natural(x) de la figura 1 se comporta como un generador no acotado. Llamaremos generador anómalo a aquel generador que es incapaz, por construcción, de generar la secuencia completa de respuestas computadas esperada (normalmente, porque el árbol de búsqueda incluye más de una rama infinita). Un ejemplo de generador anómalo es el predicado p/2: p(x,y) :- es_natural(x), es_natural(y). Intuitivamente, p(a,b) debería devolvernos todos los pares (A, B) tales que A, B N. Sin embargo, sólo nos devuelve pares (0, B) con B N:?- p(a,b). A= c B= c; A= c B= s(c); A= c B= s(s(c));... Por último, llamaremos significado a la acción particular llevada a cabo por el predicado en cierto uso. El significado suele describirse indicando la clase de términos para los que tiene éxito (en el caso de tests), o el patrón que siguen las respuestas computadas (en el caso de generadores.) Todos los posibles usos, comportamientos y significados de un predicado pueden recogerse en una tabla de comportamiento. Una tabla de comportamiento tiene tres columnas. En la primera aparece el uso, en la segunda el comportamiento y en la tercera y última el significado. La figura 2 muestra la tabla de comportamiento del predicado es_natural/1. Normalmente un programador Prolog competente suele anotar los usos admisibles de un predicado como parte de la documentación de un programa. Algunas implementaciones de Prolog disponen de la directiva mode para declarar los usos soportados por un predicado. La directiva: :- mode nombre_pred(modo_1,..., modo_n).
7 Técnicas básicas de programación Prolog T2.7 es_natural(x) uso comportamiento significado + test X N - generador no acotado X = c, s(c), s(s(c)),... Figura 2: Tabla de comportamiento de es_natural/1. declara un uso válido de nombre_pred/n, indicando para cada argumento el modo en que puede aparecer, que puede ser + o -. Si se intenta utilizar un predicado en un uso que no ha sido declarado mediante la correspondiente directiva mode, el compilador de Prolog puede generar una advertencia. 2 Podríamos declarar los usos válidos del predicado es_natural/1 mediante las directivas: :- mode es_natural(+). :- mode es_natural(-). que declaran que es_natural/1 puede emplearse en usos + o -. La directiva mode soporta una abreviatura,?, que indica que el argumento puede aparecer indistintamente en modo + o -, lo que permite especificar varios usos válidos con una sola directiva mode. Por ejemplo, los usos válidos de es_natural/1 se pueden declarar mediante la directiva: :- mode es_natural(?). puesto que el predicado funciona independientemente del modo en que se encuentre su argumento. Aunque una implementación de Prolog no soporte declaraciones de modo, es buena idea añadirlas al programa en forma de comentario: % :- mode es_natural(?). es_natural(c). es_natural(s(x)) :- es_natural(x). Así aparecen descritos los predicados en casi todas las librerías Prolog. 3 Ejercicios 1. Cómo se comporta es_natural/1 si intercambiamos el orden del hecho y la regla? es_natural(s(x)) :- es_natural(x). es_natural(c). 2 Son pocos los compiladores de Prolog que soportan la directiva mode y más escasos aún los que comprueban los usos correctos en tiempo de ejecución. 3 SWI-Prolog no soporta la directiva mode; sin embargo, emplea la notación +, -,? en la documentación de los parámetros de los predicados predefinidos.
8 T2.8 Técnicas básicas de programación Prolog En concreto, cómo afecta esto a las semánticas declarativa y operacional del programa? Influye el orden en que aparecen los hechos y reglas en un programa? 2. Qué representa el término s(s(x))? Cómo se comporta el objetivo es_natural(s(s(x)))? En qué modo se encuentra el argumento s(s(x))? 3. Define los predicados par/1 e impar/1 utilizando recursión directa y recursión mutua. Construye las tablas de comportamiento y compara las semánticas declarativa y operacional. Relaciones aritméticas básicas. Una vez representados los objetos (los naturales) mediante términos Prolog, parece razonable preguntarse qué tipo de relaciones entre naturales nos interesan y cómo podemos representarlas mediante procedimientos (hechos y reglas). Las relaciones entre naturales serán operaciones (+,,,...) y relaciones (<, >, =,...) aritméticas básicas. Estas operaciones y relaciones se definen habitualmente como funciones: + : N N N : N N N... Prolog no permite definir funciones, sino predicados o relaciones. Esto significa que debemos pasar de un estilo funcional a un estilo relacional. La ventaja del estilo relacional es que, como veremos, desaparecen los conceptos de entrada y salida. Comenzaremos definiendo la suma de naturales como una relación ternaria tal que suma(x,y,z) se satisface cuando Z = X + Y. Puesto que los objetos relacionados (naturales) son recursivos, lo normal será que la relación suma/3 sea recursiva. En general, para definir una relación recursiva aplicaremos recursión a algunos de sus argumentos (o a alguna relación entre sus argumentos). En el caso de suma/3, podemos aplicar recursión al primer argumento, que podrá ser c (caso base) o s(x) (caso recursivo), de donde obtenemos el esquema: suma(c,?,?) :-... suma(s(x),?,?) :-... [Caso Base] [Caso Recursivo] Ahora debemos determinar qué términos corresponden a los otros argumentos, señalados en el esquema con el símbolo?, así como las condiciones que debe verificar cada caso de la relación. El segundo argumento puede ser cualquier natural y no es necesario razonar según su valor. Por lo tanto, podemos utilizar una variable Y:
9 Técnicas básicas de programación Prolog T2.9 suma(c,y,?) :-... suma(s(x),y,?) :-... [Caso Base] [Caso Recursivo] El caso base es fácil de resolver: su tercer argumento es la suma de c e Y; es decir, Y. Además, 0 + Y = Y se satisface incondicionalmente, por lo que basta emplear un hecho: suma(c,y,y). suma(s(x),y,?) :-... [Caso Base] [Caso Recursivo] El caso recursivo es sólo un poco más complicado. Por ser recursivo, debe contener una llamada a sí mismo: suma(c,y,y). suma(s(x),y,?) :- suma(?,?,?),... [Caso Base] [Caso Recursivo] La cláusula recursiva se emplea para resolver (X + 1) + Y. La llamada recursiva debe resolver una suma menor, más próxima al caso base. En particular, puesto que estamos aplicando recursión sobre el primer argumento, X + 1, la invocación recursiva debe calcular la suma X + Y, de donde: suma(c,y,y). suma(s(x),y,?) :- suma(x,y,?),... [Caso Base] [Caso Recursivo] Supongamos que sabemos la solución de X + Y, a la que llamaremos Z. Entonces obtenemos: suma(c,y,y). suma(s(x),y,?) :- suma(x,y,z),... [Caso Base] [Caso Recursivo] Ahora bien, si X + Y = Z, entonces (X + 1) + Y = Z + 1, luego: suma(c,y,y). suma(s(x),y,s(z)) :- suma(x,y,z). [Caso Base] [Caso Recursivo] Podemos plantear ahora la resolución del objetivo:?- suma(s(s(c)),s(c),z). que devolverá como única respuesta computada Z=s(s(s(c))). A pesar de las apariencias, el predicado suma/3 no está correctamente definido. Para entender por qué, basta resolver el objetivo:?- suma(c, f(a), Z). que devuelve como única respuesta computada Z=f(a). Esto es incorrecto, pues la relación suma/3 sólo debe satisfacerse entre tres naturales. Prolog es incapaz de reconocer este error por carecer de tipos. Para subsanarlo basta añadir una comprobación de dominio al caso base: suma(c,y,y):- es_natural(y). suma(s(x),y,s(z)) :- suma(x,y,z). [Caso Base] [Caso Recursivo]
10 T2.10 Técnicas básicas de programación Prolog 1) suma(s(s(c)), s(c), s(s(s(c)))) 2 - {X1/s(c), Y1/s(c), Z1/s(s(c))} 2) suma(s(c), s(c), s(s(c))) 2 - {X2/c, Y2/s(c), Z2/s(c)} 3) suma(c, s(c), s(c)) 1 - {Y3/s(c)} 4) es_natural(s(c)) 4 - {X4/c} 5) es_natural(c) 3-6. éxito {} Figura 3: Uso (+,+,+) de suma/3. Cómo se construye una tabla de comportamiento. El predicado suma/3 tiene, en principio, 8 usos diferentes (2 3, 3 argumentos en modos + o -). Para obtener la tabla de comportamiento de suma/3 basta resolver objetivos que ilustren los distintos usos. El uso (+,+,+) es un test que comprueba que el tercer elemento de la relación es la suma de los dos primeros. El objetivo:?- suma(s(s(c)),s(c),s(s(s(c)))). Yes termina con éxito y da lugar al árbol de búsqueda de la figura 3. El caso recursivo va eliminando functores s/1 tanto de X como de Z. En el caso base, X se ha reducido a c y Y y Z deben ser idénticos. El uso (+,+,-) es un generador único que calcula la suma de los dos primeros argumentos:?- suma(s(s(c)),s(c),z). Z= s(s(s(c))) ; No La figura 4 muestra un uso (+,+,-) de suma/3. El caso recursivo va eliminando functores s/1 de X y construyendo progresivamente Z. Para ello,
11 Técnicas básicas de programación Prolog T2.11 1) suma(s(s(c)), s(c), Z) 2 - {X1/s(c), Y1/s(c), Z/s(Z1)} 2) suma(s(c), s(c), Z1) 2 - {X2/c, Y2/s(c), Z1/s(Z2)} 3) suma(c, s(c), Z2) 1 - {Y3/s(c), Z2/s(c)} 4) es_natural(s(c)) 4 - {X4/c} 5) es_natural(c) 3-6. éxito {Z/s(s(s(c)))} Figura 4: Uso (+,+,-) de suma/3. se introducen variables intermedias Z i y se construyen sustituciones de la forma {Z i /s(z i+1 )}. El caso base unifica Y con la última variable Z n introducida, donde n es el número de functores s/1 de X, completando la construcción de Z. Esta construcción progresiva de la solución mediante variables y sustituciones intermedias es típica de la programación lógica, por lo que es importante familiarizarse con este mecanismo. El uso (+,-,+) se comporta como un generador único que calcula la diferencia entre el tercer y el primer argumento:?- suma(s(s(c)),y,s(s(s(c)))). Y= s(c) ; No Lo interesante de este ejemplo es que estamos usando el mismo código para sumar y para restar. En el estilo funcional, los argumentos de la función son siempre entradas que se deben facilitar y el valor devuelto por la función es la salida. En el estilo relacional desaparece la dependencia de las salidas respecto de las entradas. Que un parámetro sea de entrada o salida depende de cuál sea su modo. El árbol de búsqueda se muestra en la figura 5. Como en el uso (+,+,+), el caso recursivo va eliminando functores de X y Z. Al llegar al caso base se unifica la incógnita Y con Z. El uso (-,+,+) es similar a (+,-,+). También es un generador único que sirve para restar. La diferencia es que en este caso el árbol (ver figura 6) contendrá una rama fallo adicional. Esto se debe a que cuando Y y
12 T2.12 Técnicas básicas de programación Prolog 1) suma(s(s(c)), Y, s(s(s(c)))) 2 - {X1/s(c), Y1/Y, Z1/s(s(c))} 2) suma(s(c), Y, s(s(c))) 2 - {X2/c, Y2/Y, Z2/s(c)} 3) suma(c, Y, s(c)) 1 - {Y3/s(c), Y/s(c)} 4) es_natural(s(c)) 4 - {X4/c} 5) es_natural(c) 3-6. éxito {Y/s(c)} Figura 5: Uso (+,-,+) de suma/3. 1) suma(x, s(s(c)), s(s(s(c)))) 2 - {X/s(X1), Y1/s(s(c)), Z1/s(s(c))} 2) suma(x1, s(s(c)), s(s(c))) 2 - {X1/s(X2), Y2/s(s(c)), Z2/s(c)} 1 - {X1/c, Y2/s(s(c))} 3) es_natural(s(s(c))) 7) suma(x2, s(s(c)), s(c)) 4 - {X3/s(c)} 2 - {X2/s(X3), Y3/s(s(c)), Z3/c} 4) es_natural(s(c)) 8) suma(x3, s(s(c)), c) fallo 4 - {X4/c} 5) es_natural(c) 3-6. éxito {X/s(c)} Figura 6: Uso (-,+,+) de suma/3.
13 Técnicas básicas de programación Prolog T2.13 1) suma(x, Y, s(s(c))) 1 - {X/c, Y1/s(s(c)), Y/s(s(c))} 2 - {X/s(X1), Y1/Y, Z1/s(c)} 2) es_natural(s(s(c))) 4 - {X2/s(c)} 6) suma(x1, Y, s(c)) 1 - {X1/c, Y2/s(c), Y/s(c)} 2 - {X1/s(X2), Y2/Y, Z2/c} 3) es_natural(s(c)) 4 - {X3/c} 4) es_natural(c) 3-5. éxito {X/c, Y/s(s(c))} 7) es_natural(s(c)) 4 - {X3/c} 8) es_natural(c) 3-9. éxito {X/s(c), Y/s(c)} 10) suma(x2, Y, c) 1 - {X2/c, Y3/c, Y/c} 11) es_natural(c) éxito {X/s(s(c)), Y/c} Figura 7: Uso (-,-,+) de suma/3. Z unifican, se pueden aplicar tanto el caso base como el caso recursivo. El primero completará la construcción de X y conducirá a la solución, mientras que el segundo acabará fallando al reducir Z a c. Aunque ambos usos sirven para restar, el uso (+,-,+) es preferible por ser más eficiente. El uso (-,-,+) se comporta como un generador acotado que descompone un natural dado Z en dos sumandos X e Y:?- suma(x,y,s(s(c))). X= c Y= s(s(c)) ; X= s(c) Y= s(c) ; X= s(s(c)) ; Y= c No Este caso ilustra la potencia que puede alcanzar el estilo relacional. El árbol de resolución se muestra en la figura 7. Puesto que el caso base y el recursivo no son excluyentes, la ejecución de este objetivo genera respuestas múltiples. Cuando se aplica el caso base, X se instancia a c y se unifican Y y Z, una forma trivial de satisfacer la relación. El caso recursivo elimina un
14 T2.14 Técnicas básicas de programación Prolog 1) suma(s(s(c)), Y, Z) 2 - {X1/s(c), Y1/Y, Z/s(Z1)} 2) suma(s(c), Y, Z1) 2 - {X2/c, Y2/Y, Z1/s(Z2)} 3) suma(c, Y, Z2) 1 - {Y3/Z2, Y/Z2} 4) es_natural(z2) 4 - {Z2/s(X4)} 3 - {Z2/c} 5. éxito {Y/c, Z/s(s(c))} 6) es_natural(x4) 4 - {X4/s(X5)} 3 - {X4/c} 7. éxito {Y/s(c), Z/s(s(s(c)))} 8) es_natural(x5)... Figura 8: Uso (+,-,-) de suma/3. functor s/1 de Z, y construye progresivamente X, introduciendo variables y sustituciones intermedias. El uso (+,-,-) es un generador no acotado:?- suma(s(s(c)),y,z). Y= c Z= s(s(c)) ; Y= s(c) Z= s(s(s(c))) ;... en Y obtenemos los naturales y en Z los naturales mayores o iguales que X. La figura 8 muestra el árbol de búsqueda. Al estar X en modo +, los casos base y recursivo de suma/3 son excluyentes y la recursión converge de forma determinista al caso base. El caso recursivo va eliminando functores s/1 de X y construyendo progresivamente Z. Una vez que se alcanza el caso base, se unifican la Y y la variable Z n, completando la construcción de Z. En los ejemplos anteriores, todas las comprobaciones de dominio es_natural/1 se han ejecutado en modo +. En este caso, como Y ha quedado libre, la comprobación de dominio es_natural se ejecuta en modo -, comportándose como un generador no acotado. La capacidad de generar respuestas múltiples de suma(+,-,-) proviene del uso en modo -
15 Técnicas básicas de programación Prolog T2.15 1) suma(x, s(c), Z) 1 - {X/c, Y1/s(c), Z/s(c)} 2 - {X/s(X1), Y1/s(c), Z/s(Z1)} 2) es_natural(s(c)) 5) suma(x1, s(c), Z1) 4 - {X2/c} 1 - {X1/c, Y2/s(c), Z1/s(c)} 2 - {X1/s(X2), Y2/s(c), Z1/s(Z2)} 3) es_natural(c) 6) es_natural(s(c)) 8) suma(x2, s(c), Z2) {X3/c} 1 - {X2/c, Y3/s(c), Z2/s(c)} 2 - {X2/s(X3), Y3/s(c), Z2/s(Z3)} 4. éxito {X/c, Z/s(c)} 7) es_natural(c)... 9) es_natural(s(c))... 10) suma(x3, s(c), Z3)... Figura 9: Uso (-,+,-) de suma/3. del predicado es_natural/1. El uso (-,+,-) es similar al uso (+,-,-):?- suma(x,s(s(c)),z). X= c Z= s(s(c)) ; X= s(c) Z= s(s(s(c))) ;... el árbol de resolución de la figura 9 muestra que, en este caso, se generan respuestas múltiples porque los casos base y recursivo de suma/3 no son excluyentes; mientras que es_natural/1 se comporta como un test. Finalmente, el uso (-,-,-) se comporta como un generador anómalo:?- suma(x,y,z). X= c Y= c Z= c ; X= c Y= s(c) Z= s(c) ;...
16 T2.16 Técnicas básicas de programación Prolog 1) suma(x, Y, Z) 1 - {X/c, Y1/Z, Y/Z} 2 - {X/s(X1), Y1/Y, Z/s(Z1)} 2) es_natural(z) 4 - {Z/s(X2)} 3 - {Z/c} 5) suma(x1, Y, Z1) 1 - {X1/c, Y2/Z1, Y/Z1} 2 - {X1/s(X2), Y2/Y, Z1/s(Z2)} 3. éxito {X/c, Y/c, Z/c} 4) es_natural(x2) 6) es_natural(z1) 7) suma(x2, Y, Z2) Figura 10: Uso (-,-,-) de suma/3. La semántica declarativa nos dice que este objetivo debería generar todas las tripletas (X, Y, Z) tales que Z = X + Y. Sin embargo, la ejecución del objetivo su semántica operacional genera tripletas de la forma (0, Y, Z), con Z = 0 + Y = Y. El problema, tal y como ilustra la la figura 10, es que hay más de una rama infinita. El objetivo suma(x,y,z) se puede resolver aplicando el caso base o el recursivo. Al aplicar el primero, X se instancia a c, se unifican Y y Z, y obtenemos el subojetivo es_natural(z), que se comporta como un generador no acotado. Puesto que la construcción del árbol se hace en profundidad, nunca se considera la posibilidad de aplicar el caso recursivo al objetivo inicial. La figura 11 muestra la tabla de comportamiento del predicado suma/3. Generadores, dominios y respuestas genéricas. Añadir comprobaciones de dominio a los predicados, tal como acabamos de hacer con suma/3, tiene ventajas e inconvenientes. Entre las ventajas podemos destacar que nos puede ayudar a encontrar errores en los programas al fracasar objetivos que devolverían respuestas computadas erróneas:
17 Técnicas básicas de programación Prolog T2.17 suma(x,y,z) uso comportamiento significado (+,+,+) test Z = X + Y (+,+,-) generador único suma: Z = X + Y (+,-,+) generador único resta: Y = Z X (-,+,+) generador único resta: X = Z Y (-,-,+) generador acotado {(X, Y)/X Z Y Z Z = X + Y} (+,-,-) generador no acotado {(Y, Z)/Y N Z = X + Y} (-,+,-) generador no acotado {(X, Z)/X N Z = X + Y} (-,-,-) generador anómalo X = 0, Y N, Z = Y Figura 11: Tabla de comportamiento de suma/3 con comprobación de dominio.?- suma(c,a,z). No Además, puesto que la definición de dominio es_natural/1 puede comportarse como un generador, el predicado suma/3 hereda esa capacidad generadora siempre que el segundo y tercer argumentos estén en modo -, tal como vimos al analizar el uso (+,-,-):?- suma(s(s(c)),y,z). Y = c Z = s(s(c)) ; Y = s(c) Z = s(s(s(c))) ; Y = s(s(c)) Z = s(s(s(s(c)))) ;... En cuanto a los inconvenientes de incorporar una comprobación de dominio, uno muy obvio es la ineficiencia. Además, conceptualmente estamos clasificando como falsos objetivos que quizá deberían interpretarse como errores y deberían por tanto ser rechazados por el sistema. Finalmente, al retener la capacidad generadora de es_natural/1, el predicado suma/3 pierde la posibilidad de devolver respuestas genéricas; es decir, respuestas que contengan variables libres. Si definimos el predicado sumag/3 omitiendo la comprobación de dominio en el caso base de suma/3: sumag(c,y,y). sumag(s(x),y,s(z)) :- sumag(x,y,z). para el siguiente objetivo :?- sumag(s(s(c)),y,z).
18 T2.18 Técnicas básicas de programación Prolog Z = s(s(y)) ; No obtenemos una respuesta genérica, pues Y queda libre. Las variables libres de las respuestas computadas se considera que están universalmente cuantificadas; es decir, que pueden reemplazarse por cualquier término. El objetivo pregunta a Prolog si existen Y y Z tales que Z = 2 + Y, y Prolog responde que Y puede ser cualquier natural, y Z será dos unidades superior a Y. 4 En general, prescindiremos de la comprobación de dominios, de manera que sacrificaremos la corrección para mejorar la eficiencia y obtener respuestas genéricas. Otras relaciones aritméticas. A continuación presentamos las definiciones y tablas de comportamiento de otras relaciones aritméticas típicas. iguales(x,y) se satisface si X = Y. Se puede definir aplicando recursión al primer argumento: iguales(c,c). iguales(s(x),s(y)) :- iguales(x,y). iguales(x,y) uso comportamiento significado (+,+) test X = Y (+,-) generador único copia: Y = X (-,+) generador único copia: X = Y (-,-) generador no acotado {(X, Y)/X = Y X N} Otra forma de definir iguales/2 consiste en emplear la unificación para forzar la igualdad entre los argumentos, y comprobar su sintaxis en el cuerpo de la regla: iguales(x,x) :- es_natural(x). menor(x,y) se satisface si X < Y. Podemos aplicar recursión sobre el primer argumento: menor(c,y) :- natural(y). menor(s(x),s(y)) :- menor(x,y). 4 En realidad Prolog responde que Y puede ser cualquier término, incluso uno que no sea un natural bien construido. Es el usuario el que interpreta que Y puede ser cualquier natural.
19 Técnicas básicas de programación Prolog T2.19 menor(x,y) uso comportamiento significado (+,+) test X < Y (+,-) generador no acotado {Y/Y > X} (-,+) generador acotado {X/X < Y} (-,-) generador anómalo Ejercicios 1. Construye la tabla de comportamiento el predicado sumag/3 y compárala con la de suma/3. 2. Qué ocurre al ejecutar el objetivo iguales(x,s(x))? 3. Qué ocurre si eliminamos la comprobación es_natural(y) en el caso base de menor/2? Cómo afecta esto a la tabla de comportamiento? 4. Define el predicado menor_igual(x,y), que se satisface si X Y. minimo(x,y,z) se satisface si Z = mín(x, Y). Basta aplicar recursión simultánea sobre los dos primeros argumentos. Esto permite reducir ambos argumentos hasta que uno de ellos se haga cero: minimo(c,y,c) :- es_natural(y). minimo(x,c,c) :- es_natural(x). minimo(s(x),s(y),s(z)) :- minimo(x,y,z). La definición anterior es incorrecta. Si ambos argumentos son iguales, obtenemos una respuesta repetida, lo que no tiene sentido pues el mínimo de dos naturales es único. Para solucionarlo, basta considerar explícitamente las tres posibilidades: que ambos argumentos se hagan cero simultáneamente, o que uno de ellos se haga cero y el otro no: minimo(c,c,c). minimo(c,s(y),c) :- es_natural(y). minimo(s(x),c,c) :- es_natural(x). minimo(s(x),s(y),s(z)) :- minimo(x,y,z). Esta definición sí es correcta, pero se puede hacer más concisa agrupando los dos primeros hechos: minimo(c,y,c) :- es_natural(y). minimo(s(x),c,c) :- es_natural(x). minimo(s(x),s(y),s(z)) :- minimo(x,y,z). Alternativamente, podemos evitar la recursión haciendo uso de las relaciones menor/2 y menor_igual/2:
20 T2.20 Técnicas básicas de programación Prolog minimo(x,y,x) :- menor_igual(x,y). minimo(x,y,y) :- menor(y,x). producto(x,y,z) se satisface si Z = X Y. La idea se basa en la siguiente definición recursiva de producto: Z = X Y = } X + X + X {{ + + X } Y veces = (X + X + + X) +X } {{ } (Y 1) veces = X (Y 1) + X Por lo tanto, hay que aplicar recursión sobre el segundo argumento: producto(x,c,c):- es_natural(x). producto(x,s(y),z) :- producto(x,y,t), suma(t,x,z). producto(x,y,z) uso comportamiento significado (+,+,+) test Z = X Y (+,+,-) generador único producto: Z = X Y (-,+,-) generador no acotado múltiplos de Y: {(X, Z)/X N Z = X Y} (+,-,-) generador no acotado múltiplos de X: {(Y, Z)/Y N Z = X Y} (+,-,+) no funciona cociente entero: Y = Z/X y no termina (-,+,+) no funciona cociente entero: X = Z/Y y no termina (-,-,+) no funciona si Z = 0 entonces X = Z, Y = 1 y no termina sino X N y Y = 0 (-,-,-) generador anómalo X N, Y = 0, Z = 0 El patrón de predicado recursivo. Todos los predicados recursivos que hemos definido, y la mayoría de los que definiremos a lo largo del curso, son instancias del siguiente patrón de predicado recursivo, resolver/2: resolver(problema_base,solucion_base) :- condiciones_base. [Caso Base] resolver(problema,solucion) :- reducir(problema, ProblemaReducido), resolver(problemareducido, SolucionReducida), componer(problema,solucionreducida,solucion). [Caso Recursivo]
Ecuaciones de primer grado con dos incógnitas
Ecuaciones de primer grado con dos incógnitas Si decimos: "las edades de mis padres suman 120 años", podemos expresar esta frase algebraicamente de la siguiente forma: Entonces, Denominamos x a la edad
Más detallesEjemplos de conversión de reales a enteros
Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print
Más detallesDivisibilidad y números primos
Divisibilidad y números primos Divisibilidad En muchos problemas es necesario saber si el reparto de varios elementos en diferentes grupos se puede hacer equitativamente, es decir, si el número de elementos
Más detallesSistemas de numeración
Sistemas de numeración Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. Los sistemas de numeración actuales son sistemas posicionales, que se caracterizan
Más detallesNota 2. Luis Sierra. Marzo del 2010
Nota 2 Luis Sierra Marzo del 2010 Cada mecanismo de definición de conjuntos que hemos comentado sugiere mecanismos para definir funciones y probar propiedades. Recordemos brevemente qué son las funciones
Más detallesTema 2. Espacios Vectoriales. 2.1. Introducción
Tema 2 Espacios Vectoriales 2.1. Introducción Estamos habituados en diferentes cursos a trabajar con el concepto de vector. Concretamente sabemos que un vector es un segmento orientado caracterizado por
Más detallesUniversidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS
Especificación algebraica ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS Un tipo abstracto de datos se determina por las operaciones asociadas, incluyendo constantes que se consideran como operaciones sin
Más detallesSISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: 5 10 2 2 10 1 8 10 0 =528 8 10 3 2 10 2 4 10 1 5 10 0 9 10 1 7 10 2 =8245,97
SISTEMAS DE NUMERACIÓN Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. La norma principal en un sistema de numeración posicional es que un mismo símbolo
Más detallesTABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.
TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.
Más detallesMatrices equivalentes. El método de Gauss
Matrices equivalentes. El método de Gauss Dada una matriz A cualquiera decimos que B es equivalente a A si podemos transformar A en B mediante una combinación de las siguientes operaciones: Multiplicar
Más detallesEstas visiones de la información, denominadas vistas, se pueden identificar de varias formas.
El primer paso en el diseño de una base de datos es la producción del esquema conceptual. Normalmente, se construyen varios esquemas conceptuales, cada uno para representar las distintas visiones que los
Más detallesBASES Y DIMENSIÓN. Propiedades de las bases. Ejemplos de bases.
BASES Y DIMENSIÓN Definición: Base. Se llama base de un espacio (o subespacio) vectorial a un sistema generador de dicho espacio o subespacio, que sea a la vez linealmente independiente. β Propiedades
Más detallesEJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO
EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO 1º) Considérese un número estrictamente positivo del sistema de números máquina F(s+1, m, M, 10). Supongamos que tal número es: z = 0.d 1 d...d s 10 e Responde
Más detallesUNIDAD I: LÓGICA PROPOSICIONAL
UNIDAD I: LÓGICA PROPOSICIONAL ASIGNATURA: INTRODUCCIÓN A LA COMPUTACIÓN CARRERAS: LICENCIATURA Y PROFESORADO EN CIENCIAS DE LA COMPUTACIÓN DEPARTAMENTO DE INFORMÁTICA FACULTAD DE CIENCIAS FÍSICO MATEMÁTICA
Más detallesBase de datos en Excel
Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de
Más detallesLa nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx
La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx Resumen Se dan algunas definiciones básicas relacionadas con la divisibilidad
Más detallesMódulo 9 Sistema matemático y operaciones binarias
Módulo 9 Sistema matemático y operaciones binarias OBJETIVO: Identificar los conjuntos de números naturales, enteros, racionales e irracionales; resolver una operación binaria, representar un número racional
Más detallesApuntes de Matemática Discreta 9. Funciones
Apuntes de Matemática Discreta 9. Funciones Francisco José González Gutiérrez Cádiz, Octubre de 004 Universidad de Cádiz Departamento de Matemáticas ii Lección 9 Funciones Contenido 9.1 Definiciones y
Más detallesANÁLISIS DE DATOS NO NUMERICOS
ANÁLISIS DE DATOS NO NUMERICOS ESCALAS DE MEDIDA CATEGORICAS Jorge Galbiati Riesco Los datos categóricos son datos que provienen de resultados de experimentos en que sus resultados se miden en escalas
Más detalles1. Sintaxis de Prolog
1. Sintaxis de Prolog Términos: Constantes: enteros (Ejs: 3, 4), átomos (Ejs: juan, pi) (en minúscula). Variables: Ejs: X, Casa (en mayúscula) Estructuras: functor, seguido de uno o más argumentos, es
Más detallesUnidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)
Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.
Más detallesSubespacios vectoriales en R n
Subespacios vectoriales en R n Víctor Domínguez Octubre 2011 1. Introducción Con estas notas resumimos los conceptos fundamentales del tema 3 que, en pocas palabras, se puede resumir en técnicas de manejo
Más detalles8. Sentencia return y métodos
92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente
Más detallesTécnicas Básicas de Programación Prolog
Técnicas Básicas de Programación Prolog Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Contenido 1. Programación
Más detallesLÍMITES Y CONTINUIDAD DE FUNCIONES
Capítulo 9 LÍMITES Y CONTINUIDAD DE FUNCIONES 9.. Introducción El concepto de ite en Matemáticas tiene el sentido de lugar hacia el que se dirige una función en un determinado punto o en el infinito. Veamos
Más detallesLECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS
ESTRUCTURA DE COMPUTADORES Pag. 8.1 LECCIÓN 8: CIRCUITOS Y ALGORITMOS DE MULTIPLICACIÓN DE ENTEROS 1. Circuitos de multiplicación La operación de multiplicar es mas compleja que la suma y por tanto se
Más detalles1.4.- D E S I G U A L D A D E S
1.4.- D E S I G U A L D A D E S OBJETIVO: Que el alumno conozca y maneje las reglas empleadas en la resolución de desigualdades y las use para determinar el conjunto solución de una desigualdad dada y
Más detallesDatos del autor. Nombres y apellido: Germán Andrés Paz. Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina
Datos del autor Nombres y apellido: Germán Andrés Paz Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina Correo electrónico: germanpaz_ar@hotmail.com =========0========= Introducción
Más detallesMANUAL DE USUARIO Y EJEMPLO DE UTILIZACIÓN HERRAMIENTA DLP-DELPHI LEARNING PACKAGE
MANUAL DE USUARIO Y EJEMPLO DE UTILIZACIÓN HERRAMIENTA DLP-DELPHI LEARNING PACKAGE PROFESOR: Creación y puesta en marcha de un proceso de aprendizaje Delphi: En esta fase el profesor debe realizar las
Más detallesDecisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.
Diagrama de Flujo La presentación gráfica de un sistema es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos relevantes de una manera rápida y simple. El
Más detallesIntroducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual
Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los
Más detallesby Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true
by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true I. FUNDAMENTOS 3. Representación de la información Introducción a la Informática Curso de Acceso a la Universidad
Más detallesEjemplos y problemas resueltos de análisis complejo (2014-15)
Variable Compleja I (3 o de Matemáticas y 4 o de Doble Titulación) Ejemplos y problemas resueltos de análisis complejo (04-5) Teoremas de Cauchy En estos apuntes, la palabra dominio significa, como es
Más detallesDESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO
I. SISTEMAS NUMÉRICOS DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO LIC. LEYDY ROXANA ZEPEDA RUIZ SEPTIEMBRE DICIEMBRE 2011 Ocosingo, Chis. 1.1Sistemas numéricos. Los números son los mismos en todos
Más detallesNúmeros Reales. MathCon c 2007-2009
Números Reales z x y MathCon c 2007-2009 Contenido 1. Introducción 2 1.1. Propiedades básicas de los números naturales....................... 2 1.2. Propiedades básicas de los números enteros........................
Más detallesLABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL
OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos
Más detallesAproximación local. Plano tangente. Derivadas parciales.
Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 004-005 Aproximación local. Plano tangente. Derivadas parciales. 1. Plano tangente 1.1. El problema de la aproximación
Más detallesOperaciones Booleanas y Compuertas Básicas
Álgebra de Boole El álgebra booleana es la teoría matemática que se aplica en la lógica combinatoria. Las variables booleanas son símbolos utilizados para representar magnitudes lógicas y pueden tener
Más detallesTecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014
Tecnologías en la Educación Matemática jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 1 Datos Los algoritmos combinan datos con acciones. Los datos de entrada
Más detallesLos números racionales
Los números racionales Los números racionales Los números fraccionarios o fracciones permiten representar aquellas situaciones en las que se obtiene o se debe una parte de un objeto. Todas las fracciones
Más detallesCualquier lenguaje de contexto libre, L, puede ser generado por medio de una GCL, G, que cumpla las siguientes condiciones:
Teoría de Autómatas y Lenguajes Formales Boletín de Autoevaluación 5: Cómo se simplifica una Gramática de Contexto Libre?. 1. Objetivos. El objetivo de este boletín es ilustrar cómo proceder para simplificar
Más detallesMATEMÁTICAS para estudiantes de primer curso de facultades y escuelas técnicas
Universidad de Cádiz Departamento de Matemáticas MATEMÁTICAS para estudiantes de primer curso de facultades y escuelas técnicas Tema 4 La recta en el plano Elaborado por la Profesora Doctora María Teresa
Más detallesFunciones, x, y, gráficos
Funciones, x, y, gráficos Vamos a ver los siguientes temas: funciones, definición, dominio, codominio, imágenes, gráficos, y algo más. Recordemos el concepto de función: Una función es una relación entre
Más detallesApuntes de Matemática Discreta 1. Conjuntos y Subconjuntos
Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos Francisco José González Gutiérrez Cádiz, Octubre de 2004 Universidad de Cádiz Departamento de Matemáticas ii Lección 1 Conjuntos y Subconjuntos
Más detallesSistema de Facturación de Ventas WhitePaper Enero de 2007
Sistema de Facturación de Ventas WhitePaper Enero de 2007 Ronda Guglielmo Marconi, 9 Parque Tecnológico 46980 Paterna Valencia Spain T +34 96 338 99 66 ventas@preference.es Please Recycle PrefSuite Document
Más detallesAmpliación de Estructuras de Datos
Ampliación de Estructuras de Datos Amalia Duch Barcelona, marzo de 2007 Índice 1. Diccionarios implementados con árboles binarios de búsqueda 1 2. TAD Cola de Prioridad 4 3. Heapsort 8 1. Diccionarios
Más detallesCURSO 2010-2011 TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1
Tecnología 4º ESO Tema 5: Lógica binaria Página 1 4º ESO TEMA 5: Lógica binaria Tecnología 4º ESO Tema 5: Lógica binaria Página 2 Índice de contenido 1. Señales analógicas y digitales...3 2. Código binario,
Más detallesProfr. Efraín Soto Apolinar. Función Inversa
Función Inversa Una función es una relación entre dos variables, de manera que para cada valor de la variable independiente eiste a lo más un único valor asignado a la variable independiente por la función.
Más detallesMateria: Informática. Nota de Clases Sistemas de Numeración
Nota de Clases Sistemas de Numeración Conversión Entre Sistemas de Numeración 1. EL SISTEMA DE NUMERACIÓN 1.1. DEFINICIÓN DE UN SISTEMA DE NUMERACIÓN Un sistema de numeración es un conjunto finito de símbolos
Más detallesCAPÍTULO III. FUNCIONES
CAPÍTULO III LÍMITES DE FUNCIONES SECCIONES A Definición de límite y propiedades básicas B Infinitésimos Infinitésimos equivalentes C Límites infinitos Asíntotas D Ejercicios propuestos 85 A DEFINICIÓN
Más detallesE 1 E 2 E 2 E 3 E 4 E 5 2E 4
Problemas resueltos de Espacios Vectoriales: 1- Para cada uno de los conjuntos de vectores que se dan a continuación estudia si son linealmente independientes, sistema generador o base: a) (2, 1, 1, 1),
Más detallesEstructuras de Control - Diagrama de Flujo
RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS Ingeniería en Computación Ingeniería en Informática UNIVERSIDAD NACIONAL DE SAN LUIS DEPARTAMENTO DE INFORMÁTICA AÑO 2015 Índice 1. Programación estructurada 2 1.1.
Más detallesCovarianza y coeficiente de correlación
Covarianza y coeficiente de correlación Cuando analizábamos las variables unidimensionales considerábamos, entre otras medidas importantes, la media y la varianza. Ahora hemos visto que estas medidas también
Más detallesProblemas indecidibles
Capítulo 7 Problemas indecidibles 71 Codificación de máquinas de Turing Toda MT se puede codificar como una secuencia finita de ceros y unos En esta sección presentaremos una codificación válida para todas
Más detallesLección 1-Introducción a los Polinomios y Suma y Resta de Polinomios. Dra. Noemí L. Ruiz Limardo 2009
Lección 1-Introducción a los Polinomios y Suma y Resta de Polinomios Dra. Noemí L. Ruiz Limardo 2009 Objetivos de la Lección Al finalizar esta lección los estudiantes: Identificarán, de una lista de expresiones
Más detallesFunción exponencial y Logaritmos
Eje temático: Álgebra y funciones Contenidos: Función exponencial y Logaritmos Nivel: 4 Medio Función exponencial y Logaritmos 1. Funciones exponenciales Existen numerosos fenómenos que se rigen por leyes
Más detallesElementos requeridos para crearlos (ejemplo: el compilador)
Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción
Más detallesCURSO BÁSICO DE MATEMÁTICAS PARA ESTUDIANTES DE ECONÓMICAS Y EMPRESARIALES
INECUACIONES NOTA IMPORTANTE: El signo de desigualdad de una inecuación puede ser,, < o >. Para las cuestiones teóricas que se desarrollan en esta unidad únicamente se utilizará la desigualdad >, siendo
Más detalles1. DML. Las subconsultas
1.1 Introducción 1. DML. Las subconsultas Una subconsulta es una consulta que aparece dentro de otra consulta o subconsulta en la lista de selección, en la cláusula WHERE o HAVING, originalmente no se
Más detallesIngeniería en Informática
Departamento de Informática Universidad Carlos III de Madrid Ingeniería en Informática Aprendizaje Automático Junio 2007 Normas generales del examen El tiempo para realizar el examen es de 3 horas No se
Más detallesCapítulo 4 Procesos con estructuras de repetición
Estructura de contador Capítulo 4 Procesos con estructuras de repetición Esta es una operación que incrementa en una unidad el valor almacenado en la variable c, cada vez que el flujo del diagrama pasa
Más detallesIngeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007
Enunciado Se desea efectuar el testing funcional de un programa que ejecuta transferencias entre cuentas bancarias. El programa recibe como parámetros la cuenta de origen, la de cuenta de destino y el
Más detallesPara representar los conjuntos, los elementos y la relación de pertenencia, mediante símbolos, tendremos en cuenta las siguientes convenciones:
2. Conjuntos 2.1 Introducción El concepto de conjunto, de singular importancia en la ciencia matemática y objeto de estudio de una de sus disciplinas más recientes, está presente, aunque en forma informal,
Más detallesTransformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL
ELECTRÓNICA DIGITAL La electrónica es la rama de la ciencia que se ocupa del estudio de los circuitos y de sus componentes, que permiten modificar la corriente eléctrica amplificándola, atenuándola, rectificándola
Más detallesUNIDAD 1 LAS LEYES FINANCIERAS DE CAPITALIZACIÓN DESCUENTO
- 1 - UNIDAD 1 LAS LEYES FINANCIERAS DE CAPITALIZACIÓN Y DESCUENTO Tema 1: Operaciones financieras: elementos Tema 2: Capitalización y descuento simple Tema 3: Capitalización y descuento compuesto Tema
Más detalles1.4.1.2. Resumen... 1.4.2. ÁREA DE FACTURACIÓN::INFORMES::Pedidos...27 1.4.2.1. Detalle... 1.4.2.2. Resumen... 1.4.3. ÁREA DE
MANUAL DE USUARIO DE ABANQ 1 Índice de contenido 1 ÁREA DE FACTURACIÓN......4 1.1 ÁREA DE FACTURACIÓN::PRINCIPAL...4 1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA...4 1.1.1.1. ÁREA DE FACTURACIÓN::PRINCIPAL::EMPRESA::General...4
Más detalles1º) Siempre que se pueda, hay que sacar factor común: :a b ± a c ± a d ± = a (b ± c ± d ± ):
Pág. 1 de 7 FAC T O R I Z AC I Ó N D E P O L I N O M I O S Factorizar (o descomponer en factores) un polinomio consiste en sustituirlo por un producto indicado de otros de menor grado tales que si se multiplicasen
Más detallesFunciones polinomiales de grados 3 y 4
Funciones polinomiales de grados 3 y 4 Ahora vamos a estudiar los casos de funciones polinomiales de grados tres y cuatro. Vamos a empezar con sus gráficas y después vamos a estudiar algunos resultados
Más detallesEste es un ejemplo muy sencillo, un esquema de empleados que trabajan en proyectos, en una relación muchos a muchos.
28/04/2012 La teoría de la normalización va perdiendo peso con el paso de los años como herramienta de diseño de bases de datos relacionales en favor de modelos de datos más ricos en su representación,
Más detallesQUÉ ES LA RENTABILIDAD Y CÓMO MEDIRLA. La rentabilidad mide la eficiencia con la cual una empresa utiliza sus recursos financieros.
QUÉ ES LA RENTABILIDAD Y CÓMO MEDIRLA La rentabilidad mide la eficiencia con la cual una empresa utiliza sus recursos financieros. Qué significa esto? Decir que una empresa es eficiente es decir que no
Más detalles342 SOBRE FORMAS TERNARIAS DE SEGUNDO GRADO.
342 SOBRE FORMAS TERNARIAS DE SEGUNDO GRADO. ALGUNAS APLICACIONES A LA TEORIA DE LAS FORMAS BINARIAS. Encontrar una forma cuya duplicación produce una forma dada del género principal. Puesto que los elementos
Más detallesCómo?: Resolviendo el sistema lineal homógeneo que satisfacen las componentes de cualquier vector de S. x4 = x 1 x 3 = x 2 x 1
. ESPACIOS VECTORIALES Consideremos el siguiente subconjunto de R 4 : S = {(x, x 2, x 3, x 4 )/x x 4 = 0 x 2 x 4 = x 3 a. Comprobar que S es subespacio vectorial de R 4. Para demostrar que S es un subespacio
Más detallesGENERACIÓN DE CÓDIGO
GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información
Más detallesESTUDIAR MATEMATICA EN CASA
ESTUDIAR MATEMATICA EN CASA Sugerencias para docentes Sea cual fuere el enfoque de enseñanza de la matemática adoptado, todos los docentes acuerdan en la importancia del tiempo extraescolar dedicado al
Más detallesMLM 1000 - Matemática Discreta
MLM 1000 - Matemática Discreta L. Dissett Clase 04 Resolución. Lógica de predicados c Luis Dissett V. P.U.C. Chile, 2003 Aspectos administrativos Sobre el tema vacantes: 26 personas solicitaron ingreso
Más detallesCreación de Funciones de Conducción
Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado
Más detallesSOLUCIÓN CASO GESTIÓN DE PERSONAL I
SOLUCIÓN CASO GESTIÓN DE PERSONAL I Empezaremos abriendo un nuevo libro de trabajo que podemos guardar como Nóminas e introducimos los datos que nos proporciona el enunciado relativos a coste por hora
Más detallesAlgoritmos y Diagramas de Flujo 2
Algoritmos y Diagramas de Flujo 2 Programación Java NetBeans 7.0 RPC Contenido 2.1 Algoritmo...1 Fase de creación de un algoritmo...1 Herramientas de un algoritmo...2 2.2 Diagrama de Flujo...2 Símbolos
Más detalles1. Ecuaciones no lineales
1. Ecuaciones no lineales 1.1 Ejercicios resueltos Ejercicio 1.1 Dada la ecuación xe x 1 = 0, se pide: a) Estudiar gráficamente sus raíces reales y acotarlas. b) Aplicar el método de la bisección y acotar
Más detallesFundamentos de Investigación de Operaciones Investigación de Operaciones 1
Fundamentos de Investigación de Operaciones Investigación de Operaciones 1 1 de agosto de 2003 1. Introducción Cualquier modelo de una situación es una simplificación de la situación real. Por lo tanto,
Más detallesLos sistemas de numeración se clasifican en: posicionales y no posicionales.
SISTEMAS NUMERICOS Un sistema numérico es un conjunto de números que se relacionan para expresar la relación existente entre la cantidad y la unidad. Debido a que un número es un símbolo, podemos encontrar
Más detallesPrograma para el Mejoramiento de la Enseñanza de la Matemática en ANEP Proyecto: Análisis, Reflexión y Producción. Fracciones
Fracciones. Las fracciones y los números Racionales Las fracciones se utilizan cotidianamente en contextos relacionados con la medida, el reparto o como forma de relacionar dos cantidades. Tenemos entonces
Más detallesAdaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.
Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra
Más detallesEcuaciones Diferenciales Tema 2. Trasformada de Laplace
Ecuaciones Diferenciales Tema 2. Trasformada de Laplace Ester Simó Mezquita Matemática Aplicada IV 1 1. Transformada de Laplace de una función admisible 2. Propiedades básicas de la transformada de Laplace
Más detallesTransformaciones canónicas
apítulo 29 Transformaciones canónicas 29.1 Introducción onsideremos una transformación arbitraria de las coordenadas en el espacio de las fases de dimensión 2(3N k) (con el tiempo como un parámetro) Q
Más detallesTema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código
Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación
Más detalles1. Producto escalar, métrica y norma asociada
1. asociada Consideramos el espacio vectorial R n sobre el cuerpo R; escribimos los vectores o puntos de R n, indistintamente, como x = (x 1,..., x n ) = n x i e i i=1 donde e i son los vectores de la
Más detallesGUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE
ÍNDICE ACCESO A LA APLICACIÓN... 2 1.- HOMOLOGACIÓN DE CURSOS... 4 1.1.- INICIAR EXPEDIENTE... 4 1.2.- CONSULTA DE EXPEDIENTES... 13 1.3.- RENUNCIA A LA HOMOLOGACIÓN... 16 2.- MECÁNICA DE CURSOS... 19
Más detallesTema 3. Espacios vectoriales
Tema 3. Espacios vectoriales Estructura del tema. Definición y propiedades. Ejemplos. Dependencia e independencia lineal. Conceptos de base y dimensión. Coordenadas Subespacios vectoriales. 0.1. Definición
Más detallesFactorización de polinomios
Factorización de polinomios Polinomios Un polinomio p en la variable x es una expresión de la forma: px a 0 a 1 x a x a n1 x n1 a n x n donde a 0, a 1, a,, a n1, a n son unos números, llamados coeficientes
Más detallesCapítulo VI. Diagramas de Entidad Relación
Diagramas de Entidad Relación Diagramas de entidad relación Tabla de contenido 1.- Concepto de entidad... 91 1.1.- Entidad del negocio... 91 1.2.- Atributos y datos... 91 2.- Asociación de entidades...
Más detallesUna variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.
Descripción de la semántica de ALFA En esta descripción sólo se mencionarán los aspectos en los que el lenguaje de programación ALFA pueda diferir de otros lenguajes de programación de alto nivel. Se sobreentienden
Más detallesDefinición 1.1.1. Dados dos números naturales m y n, una matriz de orden o dimensión m n es una tabla numérica rectangular con m filas y n columnas.
Tema 1 Matrices Estructura del tema. Conceptos básicos y ejemplos Operaciones básicas con matrices Método de Gauss Rango de una matriz Concepto de matriz regular y propiedades Determinante asociado a una
Más detallesPRÁCTICA N 2 SISTEMAS DE NUMERACIÓN
PRÁCTICA N 2 SISTEMAS DE NUMERACIÓN Ejercicio 1. Diseñar una planilla EXCEL que tome como dato de entrada un número entero y devuelva la representación en base 2. Testearla con los números 23, 245, 673,
Más detallesARQUITECTURA DE DISTRIBUCIÓN DE DATOS
4 ARQUITECTURA DE DISTRIBUCIÓN DE DATOS Contenido: Arquitectura de Distribución de Datos 4.1. Transparencia 4.1.1 Transparencia de Localización 4.1.2 Transparencia de Fragmentación 4.1.3 Transparencia
Más detallesDISEÑO DE FUNCIONES (TRATAMIENTOS)
DISEÑO DE FUNCIONES (TRATAMIENTOS) Diseño Estructurado. Estrategias para Derivar el Diagrama de Estructura. Diseño de Módulos Programables. 1. DISEÑO ESTRUCTURADO El Diseño es el proceso por el cual se
Más detallesUNIDADES FUNCIONALES DEL ORDENADOR TEMA 3
UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:
Más detallesSITEMA BINARIO, OCTAL Y HEXADECIMAL: OPERACIONES
Unidad Aritmética Lógica La Unidad Aritmético Lógica, en la CPU del procesador, es capaz de realizar operaciones aritméticas, con datos numéricos expresados en el sistema binario. Naturalmente, esas operaciones
Más detalles