Técnicas básicas de programación Prolog

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

Download "Técnicas básicas de programación Prolog"

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]

Técnicas Básicas de Programación Prolog

Té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 detalles

Ejemplos de conversión de reales a enteros

Ejemplos 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 detalles

ALGEBRA LINEAL. Héctor Jairo Martínez R. Ana María Sanabria R.

ALGEBRA LINEAL. Héctor Jairo Martínez R. Ana María Sanabria R. ALGEBRA LINEAL Héctor Jairo Martínez R. Ana María Sanabria R. SEGUNDO SEMESTRE 8 Índice general. SISTEMAS DE ECUACIONES LINEALES.. Introducción................................................ Conceptos

Más detalles

Tema 2. Recursividad. Fundamentos de Programación II. Luís Rodríguez Baena (luis.rodriguez@upsam.net)

Tema 2. Recursividad. Fundamentos de Programación II. Luís Rodríguez Baena (luis.rodriguez@upsam.net) Fundamentos de Programación II Tema 2. Recursividad Luís Rodríguez Baena (luis.rodriguez@upsam.net) Universidad Pontificia de Salamanca (campus Madrid) Escuela Superior de Ingeniería y Arquitectura Naturaleza

Más detalles

El proyecto realizado consiste en un resolutor de sudokus mediante CSP.

El proyecto realizado consiste en un resolutor de sudokus mediante CSP. Introducción El proyecto realizado consiste en un resolutor de sudokus mediante CSP. El problema del sudoku fue inventado por Howard Garns en 1979 y se volvió muy popular en Japón en 1986. En España ha

Más detalles

Matemáticas. 1 o ESO. David J. Tarifa García. info@esobachilleratouniversidad.com.es

Matemáticas. 1 o ESO. David J. Tarifa García. info@esobachilleratouniversidad.com.es Matemáticas 1 o ESO David J. Tarifa García info@esobachilleratouniversidad.com.es 1 Matemáticas - 1 o ESO 2 Índice 1 Tema 1. Los números naturales 6 1.1 Suma de números naturales................................

Más detalles

1 Agencia de viajes: enunciado

1 Agencia de viajes: enunciado 1 AGENCIA DE VIAJES: ENUNCIADO 1 1 Agencia de viajes: enunciado Una agencia de viajes mantiene una base de datos con exactamente N clientes y M destinos turísticos. En una situación real, estos valores

Más detalles

1. Sintaxis de Prolog

1. 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 detalles

4 o Ingeniería Informática

4 o Ingeniería Informática Esquema del tema 1. Introducción 4 o Ingeniería Informática II26 Procesadores de lenguaje Estructura de los compiladores e intérpretes 2. Etapas del proceso de traducción 3. La interpretación 4. La arquitectura

Más detalles

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS PROGRAMACIÓN BÁSICA DE LA COMPUTADORA 1 Introducción Un sistema de computadora total incluye tanto circuitería (hardware) como programación (software). El hardware consta de los componentes físicos y todo

Más detalles

Sistemas de producción y búsqueda de soluciones. Area de Computación e Inteligencia Artificial 1

Sistemas de producción y búsqueda de soluciones. Area de Computación e Inteligencia Artificial 1 Sistemas de producción y búsqueda de soluciones Area de Computación e Inteligencia Artificial 1 Técnicas de búsqueda Resolución de problemas en Inteligencia Artificial. En general, podemos afirmar que

Más detalles

MATEMÁTICAS II APUNTES DE TEORÍA CURSO ACADÉMICO 2012-13. Carlos Ivorra

MATEMÁTICAS II APUNTES DE TEORÍA CURSO ACADÉMICO 2012-13. Carlos Ivorra MATEMÁTICAS II APUNTES DE TEORÍA CURSO ACADÉMICO 2012-13 Carlos Ivorra Índice 1 Introducción a la optimización 1 2 Programación entera 18 3 Introducción a la programación lineal 24 4 El método símplex

Más detalles

Ecuaciones de primer grado con dos incógnitas

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 detalles

SECRETARIA DE EDUCACIÓN PÚBLICA SUBSECRETARIA DE EDUCACIÓN MEDIA SUPERIOR DIRECCIÓN DE BACHILLERATOS ESTATALES Y PREPARATORIA ABIERTA

SECRETARIA DE EDUCACIÓN PÚBLICA SUBSECRETARIA DE EDUCACIÓN MEDIA SUPERIOR DIRECCIÓN DE BACHILLERATOS ESTATALES Y PREPARATORIA ABIERTA SECRETARIA DE EDUCACIÓN PÚBLICA SUBSECRETARIA DE EDUCACIÓN MEDIA SUPERIOR DIRECCIÓN DE BACHILLERATOS ESTATALES Y PREPARATORIA ABIERTA DEPARTAMENTO DE PREPARATORIA ABIERTA MATEMÁTICAS II GUIA DE ESTUDIO

Más detalles

TEMA II: ÁLGEBRA DE CONMUTACIÓN

TEMA II: ÁLGEBRA DE CONMUTACIÓN TEMA II: ÁLGEBRA DE CONMUTACIÓN En este capítulo veremos los métodos matemáticos que se disponen para las operaciones relacionadas con los circuitos digitales, así como las funciones más básicas de la

Más detalles

Karel y Recursión. I. Entendiendo la Recursión

Karel y Recursión. I. Entendiendo la Recursión I. Entendiendo la Recursión Karel y Recursión Recursión es la forma en la cual se especifica un proceso basado en su propia definición. Siendo un poco más precisos, y para evitar el aparente círculo sin

Más detalles

MATEMÁTICAS para estudiantes de primer curso de facultades y escuelas técnicas

MATEMÁ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 3 Ecuaciones y sistemas. Inecuaciones Elaborado por la Profesora Doctora

Más detalles

2º ITT SISTEMAS ELECTRÓNICOS 2º ITT SISTEMAS DE TELECOMUNICACIÓN 3º INGENIERÍA DE TELECOMUNICACIÓN AUTÓMATAS Y SISTEMAS DE CONTROL

2º ITT SISTEMAS ELECTRÓNICOS 2º ITT SISTEMAS DE TELECOMUNICACIÓN 3º INGENIERÍA DE TELECOMUNICACIÓN AUTÓMATAS Y SISTEMAS DE CONTROL 2º ITT SISTEMAS ELECTRÓNICOS 2º ITT SISTEMAS DE TELECOMUNICACIÓN 3º INGENIERÍA DE TELECOMUNICACIÓN AUTÓMATAS Y SISTEMAS DE CONTROL PRÁCTICA 2: INTRODUCCIÓN A MATLAB. CARACTERÍSTICAS BÁSICAS DE MATLAB Funcionalidades

Más detalles

{} representa al conjunto vacío, es decir, aquel que no contiene elementos. También se representa por.

{} representa al conjunto vacío, es decir, aquel que no contiene elementos. También se representa por. 2. Nociones sobre Teoría de Conjuntos y Lógica Para llevar a cabo nuestro propósito de especificar formalmente los problemas y demostrar rigurosamente la correctitud de nuestro programas, introduciremos

Más detalles

3 ESTRUCTURAS DE CONTROL REPETITIVAS. BUCLES

3 ESTRUCTURAS DE CONTROL REPETITIVAS. BUCLES 3 ESTRUCTURAS DE CONTROL REPETITIVAS. BUCLES 3.1 Estructuras de repetición Una estructura de repetición, también llamada lazo o bucle, hace posible la ejecución repetida de secciones específicas de código.

Más detalles

EIE 446 - SISTEMAS DIGITALES Tema 2: Sistemas de Numeración, Operaciones y Códigos

EIE 446 - SISTEMAS DIGITALES Tema 2: Sistemas de Numeración, Operaciones y Códigos EIE 446 - SISTEMAS DIGITALES Tema 2: Sistemas de Numeración, Operaciones y Códigos Nombre del curso: Sistemas Digitales Nombre del docente: Héctor Vargas Fecha: 1 er semestre de 2011 INTRODUCCIÓN El sistema

Más detalles

Programación Lineal Entera

Programación Lineal Entera Programación Lineal Entera P.M. Mateo y David Lahoz 2 de julio de 2009 En este tema se presenta un tipo de problemas formalmente similares a los problemas de programación lineal, ya que en su descripción

Más detalles

TEMA 2: Grupos. El grupo Simétrico.

TEMA 2: Grupos. El grupo Simétrico. Álgebra y Estructuras Discretas Grupo B de la Ingeniería Técnica de Sistemas TEMA 2: Grupos. El grupo Simétrico. 1. Definición de Grupo. Propiedades Básicas. Definición 1. Dado un conjunto no vacío G,

Más detalles

Lenguajes y Compiladores

Lenguajes y Compiladores Información: http://www.cs.famaf.unc.edu.ar/wiki/ Profesores: Héctor Gramaglia, Miguel Pagano, Demetrio Vilela Régimen de regularidad y Promoción Se tomarán 2 parciales Promoción: obteniendo al menos 7

Más detalles

Problemas indecidibles

Problemas 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 detalles

El anillo de polinomios sobre un cuerpo

El anillo de polinomios sobre un cuerpo Capítulo 2 El anillo de polinomios sobre un cuerpo En este capítulo pretendemos hacer un estudio sobre polinomios paralelo al que hicimos en el capítulo anterior sobre los números enteros. Para esto, es

Más detalles

Receta general para resolver problemas de sincronización con semáforos

Receta general para resolver problemas de sincronización con semáforos Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que

Más detalles

DIAGRAMAS DE FLUJO: DFD

DIAGRAMAS DE FLUJO: DFD DIAGRAMAS DE FLUJO: DFD DFD es un programa de libre disposición para ayuda al diseño e implementación de algoritmos expresados en diagramas de flujo (DF). Además incorpora opciones para el depurado de

Más detalles

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

Universidad 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 detalles

Anillos Especiales. 8.1 Conceptos Básicos. Capítulo

Anillos Especiales. 8.1 Conceptos Básicos. Capítulo Capítulo 8 Anillos Especiales 8.1 Conceptos Básicos En este capítulo nos dedicaremos al estudio de algunos anillos especiales que poseen ciertas condiciones adicionales, aparte de las propias de la definición,

Más detalles

RECURSION. Se deben hacer cuatro preguntas para construir una solución recursiva:

RECURSION. Se deben hacer cuatro preguntas para construir una solución recursiva: puntes teóricos ño 2013 RECURSION Veremos un nuevo mecanismo, una nueva técnica de diseño, para resolver problemas: L RECURSIÓN. La recursión es una alternativa a la iteración o repetición, y aunque en

Más detalles

Tema 3. El modelo Relacional

Tema 3. El modelo Relacional Tema 3. El modelo Relacional Juan Ignacio Rodríguez de León Resumen Presenta el modelo entidad-relación. Visión de alto nivel de las cuestiones referentes a diseño de bases de datos y los problemas encontrados

Más detalles

Tipos Abstractos de Datos

Tipos Abstractos de Datos Objetivos Repasar los conceptos de abstracción de datos y (TAD) Diferenciar adecuadamente los conceptos de especificación e implementación de TAD Presentar la especificación algebraica como método formal

Más detalles

Repaso de matrices, determinantes y sistemas de ecuaciones lineales

Repaso de matrices, determinantes y sistemas de ecuaciones lineales Tema 1 Repaso de matrices, determinantes y sistemas de ecuaciones lineales Comenzamos este primer tema con un problema de motivación. Problema: El aire puro está compuesto esencialmente por un 78 por ciento

Más detalles

Tema 10: Límites y continuidad de funciones de varias variables

Tema 10: Límites y continuidad de funciones de varias variables Tema 10: Límites y continuidad de funciones de varias variables 1 Funciones de varias variables Definición 1.1 Llamaremos función real de varias variables atodafunciónf : R n R. Y llamaremos función vectorial

Más detalles

Tema 2: Sistemas de representación numérica

Tema 2: Sistemas de representación numérica 2.1 Sistemas de Numeración Definiciones previas Comenzaremos por definir unos conceptos fundamentales. Existen 2 tipos de computadoras: Analógicas: actúan bajo el control de variables continuas, es decir,

Más detalles

Capítulo 4 MEDIDA DE MAGNITUDES. Autor: Santiago Ramírez de la Piscina Millán

Capítulo 4 MEDIDA DE MAGNITUDES. Autor: Santiago Ramírez de la Piscina Millán Capítulo 4 MEDIDA DE MAGNITUDES Autor: Santiago Ramírez de la Piscina Millán 4 MEDIDA DE MAGNITUDES 4.1 Introducción El hecho de hacer experimentos implica la determinación cuantitativa de las magnitudes

Más detalles

INDICE. XVII Prólogo a la edición en español. XXI 1. Calculo proporcional 1.1. Argumentos y proporciones lógicas

INDICE. XVII Prólogo a la edición en español. XXI 1. Calculo proporcional 1.1. Argumentos y proporciones lógicas INDICE Prologo XVII Prólogo a la edición en español XXI 1. Calculo proporcional 1.1. Argumentos y proporciones lógicas 1 1.1.1. Introducción 1.1.2. Algunos argumentos lógicos importantes 2 1.1.3. Proposiciones

Más detalles

2 + intexp + intexp. (2) intexp. 2 + intexp

2 + intexp + intexp. (2) intexp. 2 + intexp 1. Semántica de un lenguaje: primera aproximación El establecer el significado de las frases de un lenguaje de programación es un problema de múltiples aristas en tanto puede tener variados objetivos,

Más detalles

Estructuras de Control - Diagrama de Flujo

Estructuras 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 detalles

construcción de programas Prof. Eliana Guzmán U.

construcción de programas Prof. Eliana Guzmán U. Unidad II. Metodología para la construcción de programas Prof. Eliana Guzmán U. Semestre: A-2015 Introducción Resolver un problema con una computadora conduce a la escritura de un programa y a su ejecución.

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

= x + x + x + 1 por definición de exponente 2

= x + x + x + 1 por definición de exponente 2 Equivalencia de expresiones algebraicas En este documento exploramos un concepto simple, en apariencia, enseñado en escuelas de nivel secundaria: la equivalencia de dos expresiones algebraicas Empecemos

Más detalles

8. Sentencia return y métodos

8. 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 detalles

Factorización de polinomios

Factorizació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 detalles

Clase 11. Análisis dinámico, 2ª parte.

Clase 11. Análisis dinámico, 2ª parte. Clase 11. Análisis dinámico, 2ª parte. Continuamos con el mismo tema de la clase anterior, pero esta vez nos ocuparemos principalmente de la fase de prueba. Nos detendremos brevemente en algunas de las

Más detalles

Divisibilidad y números primos

Divisibilidad 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 detalles

Notas de Clase para IL

Notas de Clase para IL Notas de Clase para IL 5. Deducción en Lógica de Primer Orden Rafel Farré, Robert Nieuwenhuis, Pilar Nivela, Albert Oliveras, Enric Rodríguez, Josefina Sierra 3 de septiembre de 2009 1 1. Formas normales

Más detalles

Comencemos a programar con. Entrega 09

Comencemos a programar con. Entrega 09 Comencemos a programar con VBA - Access Entrega 09 Estructuras de Control Eduardo Olaz 09-2 Estructuras de Control. Las estructuras de control son segmentos de código que nos permiten tomar decisiones

Más detalles

Nota 2. Luis Sierra. Marzo del 2010

Nota 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 detalles

Programación en lenguaje C++

Programación en lenguaje C++ Programación en Lenguaje C++ Objetivos Unidad Tema Subtema Objetivos VI 6.1 Metodología de la programación Metodologías Diseños de algoritmos Creación de algoritmos Entender y aplicar los pasos a seguir

Más detalles

Apuntes de Matemática Discreta 4. Permutaciones y Variaciones

Apuntes de Matemática Discreta 4. Permutaciones y Variaciones Apuntes de Matemática Discreta 4. Permutaciones y Variaciones Francisco José González Gutiérrez Cádiz, Octubre de 2004 Universidad de Cádiz Departamento de Matemáticas ii Lección 4 Permutaciones y Variaciones

Más detalles

+ 7 es una ecuación de segundo grado. es una ecuación de tercer grado.

+ 7 es una ecuación de segundo grado. es una ecuación de tercer grado. ECUACIONES Y DESIGUALDADES UNIDAD VII VII. CONCEPTO DE ECUACIÓN Una igualdad es una relación de equivalencia entre dos epresiones, numéricas o literales, que se cumple para algún, algunos o todos los valores

Más detalles

Optimización de consultas Resumen del capítulo 14

Optimización de consultas Resumen del capítulo 14 Optimización de consultas Resumen del capítulo 14 Libro: Fundamentos de Bases de Datos Silberschatz et al. 5ed. Dr. Víctor J. Sosa Agenda 1. Visión general 2. Estimación de las estadísticas de los resultados

Más detalles

1.1 Sistema de numeración binario

1.1 Sistema de numeración binario 1.1 Sistema de numeración binario Un sistema de numeración consta de: Un conjunto ordenado de cifras y un conjunto de operaciones. Llamaremos Base al número de cifras que hay en dicho conjunto. De este

Más detalles

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y 1. Paradigmas de programación Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y automáticamente convertibles

Más detalles

Ejemplos y problemas resueltos de análisis complejo (2014-15)

Ejemplos 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 detalles

Números Reales. MathCon c 2007-2009

Nú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 detalles

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas Departamento de Informática PROGRAMACIÓN DIDÁCTICA Curso 11-12 1 CONSEJERÍA DE EDUCACIÓN I.E.S. NERVIÓN Departamento de Informática CICLO FORMATIVO: TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA.

Más detalles

Problemas Resueltos de Desigualdades y Programación Lineal

Problemas Resueltos de Desigualdades y Programación Lineal Universidad de Sonora División de Ciencias Exactas y Naturales Departamento de Matemáticas. Problemas Resueltos de Desigualdades y Programación Lineal Para el curso de Cálculo Diferencial de Químico Biólogo

Más detalles

Operaciones Booleanas y Compuertas Básicas

Operaciones 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 detalles

30 = 2 3 5 = ( 2) 3 ( 5) = 2 ( 3) ( 5) = ( 2) ( 3) 5.

30 = 2 3 5 = ( 2) 3 ( 5) = 2 ( 3) ( 5) = ( 2) ( 3) 5. 11 1.3. Factorización Como ya hemos mencionado, la teoría de ideales surgió en relación con ciertos problemas de factorización en anillos. A título meramente ilustrativo, nótese que por ejemplo hallar

Más detalles

Lógica de Predicados de Primer Orden

Lógica de Predicados de Primer Orden Lógica de Predicados de Primer Orden La lógica proposicional puede ser no apropiada para expresar ciertos tipos de conocimiento. Por ejemplo: Algunas manzanas son rojas Esta afirmación no se refiere específicamente

Más detalles

Nivel Medio I-104 Provincia del Neuquén Patagonia Argentina

Nivel Medio I-104 Provincia del Neuquén Patagonia Argentina Nivel Medio I-104 Provincia del Neuquén Patagonia Argentina www.faena.edu.ar info@faena.edu.ar TERCER BLOQUE MATEMATICA Está permitida la reproducción total o parcial de parte de cualquier persona o institución

Más detalles

PRÁCTICA N 2 SISTEMAS DE NUMERACIÓN

PRÁ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 detalles

3.2 Operaciones aritmético-lógicas en Pascal

3.2 Operaciones aritmético-lógicas en Pascal 3.2 Operaciones aritmético-lógicas en Pascal Operadores Los operadores sirven para combinar los términos de las expresiones. En Pascal, se manejan tres grupos de operadores : 1. ARITMÉTICOS 2. RELACIONALES

Más detalles

Introducción a los Tipos Abstractos de Datos

Introducción a los Tipos Abstractos de Datos Página 1 de 8 Introducción a los Tipos Abstractos de Datos Introducción: Concepto de abstracción Abstracción funcional y abstracción de datos Construcción de tipos abstractos de datos Especificación de

Más detalles

Ingeniería en Informática

Ingenierí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 detalles

TEMA 1: INTRODUCCIÓN

TEMA 1: INTRODUCCIÓN 1 DISEÑO Y DESARROLLO DE COMPILADORES TEMA 1: INTRODUCCIÓN Qué es un Compilador? Un compilador no es más que un traductor, es decir, un programa que nos permite pasar información de un lenguaje a otro.

Más detalles

El Ábaco. Descripción. Para qué sirve?

El Ábaco. Descripción. Para qué sirve? El Ábaco El ábaco es un instrumento que sirve para facilitar al alumno el aprendizaje del concepto de sistema posicional de numeración (en cualquier base), cómo se forman las distintas unidades que lo

Más detalles

Dependencia lineal de vectores y sus aplicaciones a la resolución de sistemas de ecuaciones lineales y de problemas geométricos.

Dependencia lineal de vectores y sus aplicaciones a la resolución de sistemas de ecuaciones lineales y de problemas geométricos. Dependencia lineal de vectores y sus aplicaciones a la resolución de sistemas de ecuaciones lineales y de problemas geométricos. Prof. D. Miguel Ángel García Hoyo. Septiembre de 2011 Dependencia lineal

Más detalles

Tema 2. La Información y su representación

Tema 2. La Información y su representación Tema 2. La Información y su representación 2.1 Introducción. Un ordenador es una máquina que procesa información. La ejecución de un programa implica la realización de unos tratamientos, según especifica

Más detalles

Definición 1.1.1. Sea K un cuerpo. Un polinomio en x, con coeficientes en K es toda expresión del tipo

Definición 1.1.1. Sea K un cuerpo. Un polinomio en x, con coeficientes en K es toda expresión del tipo POLINOMIOS 1.1. DEFINICIONES Definición 1.1.1. Sea K un cuerpo. Un polinomio en x, con coeficientes en K es toda expresión del tipo p(x) = a i x i = a 0 + a 1 x + a 2 x 2 + + a n x n + ; a i, x K; n N

Más detalles

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008 INTRODUCCIÓN Estructura de Datos Tipos Abstractos de Datos (TAD S) Para poder obtener un programa que resuelva un problema dado, son necesarios varios pasos : La formulación y especificación del problema

Más detalles

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO TRABAJO REALIZADO COMO APOYO PARA LA CATEDRA INFORMATICA I Autora: Ing. Ing. Sylvia

Más detalles

III. BÚSQUEDA Y RESOLUCIÓN DE PROBLEMAS. III.3.

III. BÚSQUEDA Y RESOLUCIÓN DE PROBLEMAS. III.3. III. BÚSQUEDA Y RESOLUCIÓN DE PROBLEMAS. III.3. Búsquedas con retroceso. III.3.1. Búsquedas con retroceso a ciegas. III.3.1.1. Procedimientos con retroceso. La búsqueda con retroceso, o backtracking, es

Más detalles

UNIDAD 4. Paradigma funcional. Introducción a la unidad

UNIDAD 4. Paradigma funcional. Introducción a la unidad UNIDAD 4 Paradigma funcional Introducción a la unidad Si hasta ahora pensabas que programar en ensamblador, C, Java, o incluso Ruby era todo lo que había en el mundo de los lenguajes de programación, pues

Más detalles

Tipos Abstractos de Datos y Diseño por Contrato

Tipos Abstractos de Datos y Diseño por Contrato Tipos Abstractos de Datos y Diseño por Contrato 1.- Motivación de los tipos abstractos de datos Nuestro objetivo es obtener descripciones apropiadas de los objetos, para lo cual se necesita un método que

Más detalles

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes INDICE Parte I. Conceptos 1 1. El estudio de los lenguajes de programación 1.1. Por qué estudiar lenguajes de programación? 2 1.2. Breve historia de los lenguajes de programación 1.2.1. Desarrollo de los

Más detalles

Cálculo elemental de límites...

Cálculo elemental de límites... Capítulo 5 Cálculo elemental de ites... Vamos a dedicar este capítulo a tratar de mejorar nuestra relación con los ites, desarrollando el método que ya hemos anunciado, que nos permitirá calcular el ite

Más detalles

Hasta ahora hemos evitado entrar en la cuestión de qué significa el símbolo

Hasta ahora hemos evitado entrar en la cuestión de qué significa el símbolo Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 2004-2005 Límites y continuidad 1. Límite de funciones de dos variables Hasta ahora hemos evitado entrar en la

Más detalles

Fundamentos de Investigación de Operaciones Asignación y Vendedor Viajero

Fundamentos de Investigación de Operaciones Asignación y Vendedor Viajero Fundamentos de Investigación de Operaciones y Vendedor Viajero 23 de mayo de 2004 Si bien la resolución del problema de transporte mediante tableau parece ser muy expedita, existen ciertos tipos de problemas

Más detalles

SISTEMAS 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. 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 detalles

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas cruellas@ac.upc.es Objetos y clases Concepto de objeto. Concepto de clase. Clases, objetos y programas. Clases

Más detalles

DIAGRAMA DE FLUJO DE DATOS

DIAGRAMA DE FLUJO DE DATOS DIAGRAMA DE FLUJO DE DATOS AUTOR: CORDOVA NERI, TEODORO Lima Perú Córdova Neri, Teodoro 2 Diagrama de Flujo de Datos INTRODUCCIÓN La presente guía denominada DIAGRAMA DE FLUJO DE DATOS, ilustra una de

Más detalles

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES SISTEMA DE NUMERACIÓN BASE 2 El sistema de numeración binario es el conjunto de elementos {0, 1} con las operaciones aritméticas (suma, resta,

Más detalles

Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011

Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011 Módulo 2. Fundamentos de Programación Informática y Programación Escuela de Ingenierías Industriales y Civiles Curso 2010/2011 1 CONTENIDO Tema 1. Conceptos generales de algorítmica Tema 2. Sentencias

Más detalles

Notaciones y Pre-requisitos

Notaciones y Pre-requisitos Notaciones y Pre-requisitos Símbolo Significado N Conjunto de los números naturales. Z Conjunto de los números enteros. Q Conjunto de los números enteros. R Conjunto de los números enteros. C Conjunto

Más detalles

PRÁCTICA 5. SENTENCIAS DE CONTROL REPETITIVAS.

PRÁCTICA 5. SENTENCIAS DE CONTROL REPETITIVAS. PRÁCTICA 5. SENTENCIAS DE CONTROL REPETITIVAS. 1. Introducción. En esta práctica veremos todos los conceptos explicados en la segunda parte del Tema 5 de teoría: las Sentencias de Control Repetitivas,

Más detalles

Comencemos a programar con. Entrega 10. Estructuras de Control II

Comencemos a programar con. Entrega 10. Estructuras de Control II Comencemos a programar con VBA - Access Entrega 10 Estructuras de Control II Eduardo Olaz 10-2 Estructuras de Control, segunda parte Las Instrucciones While - - - Wend La estructura de bucle For Contador

Más detalles

Programación básica C++

Programación básica C++ Programación en Lenguaje C++ Programación básica C++ 6.3.1 Declaración de variables Introducción 6 Las variables sirven para identificar un determinado valor. Es importante tener en cuenta, que una variable

Más detalles

ESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS

ESCUELA SUPERIOR DE INFORMATICA Prácticas de Estadística UNA SESIÓN EN SPSS UNA SESIÓN EN SPSS INTRODUCCIÓN. SPSS (Statistical Product and Service Solutions) es un paquete estadístico orientado, en principio, al ámbito de aplicación de las Ciencias sociales, es uno de las herramientas

Más detalles

Materia: Informática. Nota de Clases Sistemas de Numeración

Materia: 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 detalles

Representación de Datos. Una Introducción a los Sistemas Numéricos

Representación de Datos. Una Introducción a los Sistemas Numéricos Representación de Datos Una Introducción a los Sistemas Numéricos Tipos de Datos Datos Texto Número Imagen Audio Video Multimedia: Información que contiene números, texto, imágenes, audio y video. Como

Más detalles

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 11. Cálculo Relacional

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 11. Cálculo Relacional FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA Tema 11. Cálculo Relacional 1.- Introducción. 2.- Cálculo Relacional Orientado a Tuplas. 3.- Cálculo Relacional vs Álgebra Relacional: Algoritmo

Más detalles

Una 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.

Una 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 detalles

Tema 1 Generalidades sobre Ecuaciones Diferenciales Ordinarias (E.D.O.)

Tema 1 Generalidades sobre Ecuaciones Diferenciales Ordinarias (E.D.O.) Tema 1 Generalidades sobre Ecuaciones Diferenciales Ordinarias (E.D.O.) 1.1 Definiciones Se llama ecuación diferencial a toda ecuación que contiene las derivadas de una o más variables dependientes respecto

Más detalles

Programación Elemental con Bases de Datos y Programación El lenguaje Prolog

Programación Elemental con Bases de Datos y Programación El lenguaje Prolog Programación Elemental con Bases de Datos y Programación II.1 El lenguaje Prolog. II.2 Programación con bases de datos. II.3 Aspectos a tener en cuenta en la programación en Prolog II.4 Programación recursiva:

Más detalles

Resolución de Problemas

Resolución de Problemas Resolución de Problemas con algoritmos Colaboratorio de Computación Avanzada (CNCA) 2015 1 / 27 Contenidos 1 Introducción 2 Elementos de algoritmos Elementos Variables Estructuras de Control Condicionales

Más detalles

Problemas de Satisfacción de Restricciones

Problemas de Satisfacción de Restricciones Problemas de Satisfacción de estricciones José Luis uiz eina José Antonio Alonso Jiménez Franciso J. Martín Mateos María José Hidalgo Doblado Dpto. Ciencias de la Computación e Inteligencia Artificial

Más detalles