Práctica 3 Tutorial de (Visual Prolog) Parte II. Germán Vidal 2IDR – Práctica 3 Curso 2007/08 Tipos de datos compuestos (1) PREDICATESbiblioteca(integer,string,string,string,integer)CLAUSES.

Slides:



Advertisements
Presentaciones similares
I.A. Listas en Prolog Parte II.
Advertisements

I.A. Listas en Prolog.
Rocío Contreras Aguila Primer Semestre 2010
Compiladores e intérpretes Análisis Sintáctico II
Programación de Computadores
Lenguajes de programación
Te presento a Python Qué es Python? Lenguaje interpretado
Metodología de la Programación
Seminario de Actualización - Excel Avanzado y Macros
Subprogramas: Procedimientos
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Tema 2: Lenguaje PHP básico
Curso de Java Estructura del Lenguaje
Entornos de programación
1.2 Sintaxis del lenguaje Java.
Preguntas tipo test (I)
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Preguntas tipo test (Tema I)
6. Operadores en PROLOG Definición de operadores propios
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
Aspectos Avanzados de Haskell
Tema 3. Optimización de Código
2 Acciones y funciones 2.1 Concepto
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Teoría de lenguajes y compiladores
Tema 6: Clases Antonio J. Sierra.
Tema 4: Sentencias de control
Sesión 6 Sentencias de Repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
Semana 5 Subprogramas..
Academia de Informática
LÓGICA - DECISIONES Los valores lógicos: constantes, variables y expresiones lógicas, permiten controlar la ejecución de las sentencias de un programa.

Sintaxis.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Tutorial de Visual Prolog Parte III
Informática Tema 5 - Estructuras de Control Estructuras de Repetición.
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Computación II Unidad X Manejo de Excepciones. Presentación de la Unidad Objetivos: –Saber manejar situaciones inesperadas dentro de un programa –Comprender.
Informática Ingeniería en Electrónica y Automática Industrial
Especialista en Business Intelligence Integration Services SSIS Tareas de Flujo de Control (Parte I) Microsoft SQL Server 2008 R2 Suscribase a
Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay 2 tipos de loops:  WHILE repite la acción un número indefinido.
Teoría – Alejandro Gonzalez
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
EXPRESIONES Y SENTENCIAS
Administración de Servicios de Red 1 Escuela de Informática y Telecomunicaciones Suplementos: Shell scripts rpm RHA 030 Sistemas Operativos de Red.
Estructura general de un programa en el servidor de Bases de Datos.
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
 Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan miembros de una comunidad.
Visual Basic FUNCIONES Y PROCEDIMIENTOS
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Teoría de lenguajes y compiladores
PROGRAMACIÓN ESTRUCTURADA LOS DIAGRAMAS DE ESTADO
Conalep Coacalco Algoritmos Recursivos
Introducción a los TADs
Estructuras de Decisión
CICLOS EN C – PARTE 3.
U2 Tipos de datos, referenciación y errores 1. Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución.
U9 Estructuras: Agrupación de elementos de distinto tipo 1 Barajar complejidad.
U5 tipos de datos secuencias y bucle definido 1 ¡¡¡¡Abstracción!!!!
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Ciclos condicionales y exactos Estructura de control de ciclos
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

Práctica 3 Tutorial de (Visual Prolog) Parte II

Germán Vidal 2IDR – Práctica 3 Curso 2007/08 Tipos de datos compuestos (1) PREDICATESbiblioteca(integer,string,string,string,integer)CLAUSES biblioteca(6, “El cuervo”, “Edgar A.”, “Poe”, 1845). DOMAINS libro = ficha(string,autor,integer) autor = autor(string,string) PREDICATESbiblioteca(integer,ficha)CLAUSES biblioteca(6, libro(“El cuervo”, autor(“Edgar A.”, “Poe”), 1845)). Problema: demasiados parámetros (aparentemente) inconexos… Usamos functores libro autor

Germán Vidal 3IDR – Práctica 3 Curso 2007/08 Tipos de datos compuestos (2) Es posible usar “;” cuando hay tipos alternativos: Es posible usar “;” cuando hay tipos alternativos:DOMAINS dato = integer ; char Error! Los tipos alternativos requieren un functor diferente DOMAINS dato = i(integer) ; c(char) Ejemplos: Ejemplos: i(38), c(‘a’), i(-23), c(‘A’), … problema dialog_int …

Germán Vidal 4IDR – Práctica 3 Curso 2007/08 Programación recursiva Intentad evitar la programación iterativa… Intentad evitar la programación iterativa… Si no hay más remedio: Si no hay más remedio: bucle :- generador de soluciones, cuerpo del bucle, cuerpo del bucle, test. % o bien ‘fail’ test. % o bien ‘fail’ bucle. % sólo si usamos fail Si se parte de una especificación recursiva Si se parte de una especificación recursiva Fácil: Fácil: Convertir funciones en procedimientos Convertir funciones en procedimientos Desanidar funciones Desanidar funciones Usar variables temporales (evitar N = N+1!) Usar variables temporales (evitar N = N+1!) Si se parte de una especificación iterativa Si se parte de una especificación iterativa Transformarla primero en una especificación recursiva! Transformarla primero en una especificación recursiva!

Germán Vidal 5IDR – Práctica 3 Curso 2007/08 Programación recursiva: Ejemplo fact(N,Fact) P := 1; I := 1; WHILE I<= N DO P := P*I; I := I+1; Fact := P fact(N,Fact) fact_aux(N,Fact,1,1) fact_aux(N,Fact,1,1)fact_aux(N,Fact,I,P) IF I <= N IF I <= N THEN P := P*I; THEN P := P*I; I := I+1; I := I+1; fact_aux(N,Fact,I,P) fact_aux(N,Fact,I,P) ELSE Fact := P fact(N,Fact) :- fact_aux(N,Fact,1,1). fact_aux(N,Fact,I,P) :- I <= N, !, NewP = P*I, NewP = P*I, NewI = I+1, NewI = I+1, fact_aux(N,Fact,I,P). fact_aux(N,Fact,I,P). fact_aux(N,Fact,I,P) :- Fact = P. fact(1,1). fact(N,M) :- NN = N-1, fact(NN,MM), M = MM*N.

Germán Vidal 6IDR – Práctica 3 Curso 2007/08 Tipos de datos recursivos: Listas (1) Declaración: Declaración:DOMAINS lista_enteros = integer* matriz_enteros = lista_enteros* elemento = i(integer) ; c(char) lista_mixta = elemento* Predefinidos (en un proyecto Visual Prolog): Predefinidos (en un proyecto Visual Prolog): ILIST (lista de enteros) ILIST (lista de enteros) SLIST (lista de strings) SLIST (lista de strings) Usadlos! (los alias dan errores…)

Germán Vidal 7IDR – Práctica 3 Curso 2007/08 Tipos de datos recursivos: Listas (2) Notación: Notación: Enumeración: [1, 2, 3, 4] Enumeración: [1, 2, 3, 4] [Cabeza|Cola]: [1 | [2, 3, 4]] [Cabeza|Cola]: [1 | [2, 3, 4]] [1, 2 | [3, 4]] [1, 2, 3 | [4]] [1, 2, 3, 4 | []] Siempre una secuencia de elementos separados por comas Siempre una lista

Germán Vidal 8IDR – Práctica 3 Curso 2007/08 Tipos de datos recursivos: Listas (3) Manipulación de listas: Manipulación de listas: Puesto que es un tipo de datos recursivo, hay que implementar procedimientos recursivos. Generalmente: Puesto que es un tipo de datos recursivo, hay que implementar procedimientos recursivos. Generalmente: Caso base: [] (lista vacía) Caso base: [] (lista vacía) Caso general: [H|R] (lista no vacía) Caso general: [H|R] (lista no vacía) Ejemplos: Ejemplos: Escritura de listas: Escritura de listas:escribir([]). escribir([H|R]) :- write(H), nl, escribir(R). Calcular el número de elementos: Calcular el número de elementos:nelem([],0). nelem([H|R], N) :- nelem(R,M), N = M+1.

Germán Vidal 9IDR – Práctica 3 Curso 2007/08 Tipos de datos recursivos: Listas (4) Más ejemplos: Más ejemplos: Comprobación de pertenencia: Comprobación de pertenencia:member(X,[X|_]). member(X,[_|R]) :- member(X,R). Concatenar dos listas: Concatenar dos listas: append([], L, L). append([H|R], L, [H|RL]) :- append(R, L, RL).

Germán Vidal 10IDR – Práctica 3 Curso 2007/08 Tipos de datos recursivos: Listas (5) Para obtener una lista con todas las soluciones a un procedimiento: Para obtener una lista con todas las soluciones a un procedimiento: findall(Var, Goal, Lista) Ejemplo: empleado(N,22,_) devuelve N=juan y N=rosa Ejemplo: empleado(N,22,_) devuelve N=juan y N=rosa findall(N,empleado(N,22,_),L) devuelve L=[juan,rosa] Características de findall : Características de findall : Var debe aparecer en Goal Var debe aparecer en Goal Si no hay ninguna solución falla (no devuelve nunca [] ) Si no hay ninguna solución falla (no devuelve nunca [] ) Puede contener repeticiones Puede contener repeticiones

Germán Vidal 11IDR – Práctica 3 Curso 2007/08 La base de datos interna (1) Declaración: Declaración: DATABASE – empleados empleado(string,integer,string) % y se elimina de % PREDICATES! CLAUSES% suele estar vacío... empleado(“juan”, 22, “e1”). empleado(“rosa”, 19, “e2”).... Consultas: como cualquier otro objetivo… Consultas: como cualquier otro objetivo… empleado(X,22,Y) -> X=“juan”, Y=“e1” empleado(“juan”,23,_) -> no (falla)...

Germán Vidal 12IDR – Práctica 3 Curso 2007/08 La base de datos interna (2) Modificación (en tiempo de ejecución): Modificación (en tiempo de ejecución): Añadir nuevas tuplas: assert, asserta, assertz Añadir nuevas tuplas: assert, asserta, assertz assert(empleado(“pedro”, 20, “e3”)) Eliminar tuplas: retract Eliminar tuplas: retract retract(empleado(“pedro”, 20, “e3”)) retract(empleado(X,Y,Z)) Eliminar todas las tuplas: retractall Eliminar todas las tuplas: retractall retractall(empleado(_, 20, _)) Siempre sin variables! Elimina el primero, backtracking para seguir eliminando… Elimina todas los empleados cuya edad es 20 sin realizar backtracking

Germán Vidal 13IDR – Práctica 3 Curso 2007/08 La base de datos interna (3) Operaciones con la base de datos: Operaciones con la base de datos: Almacenamiento de datos: save(“fichero”, “nombre_BD”) Almacenamiento de datos: save(“fichero”, “nombre_BD”)save(“miBD”,empleados) Consulta: consult(“fichero”, “nombre_BD”) Consulta: consult(“fichero”, “nombre_BD”)consult(“miBD”,empleados) Antes de consultar una BD, hay que “limpiar” la actual: Antes de consultar una BD, hay que “limpiar” la actual: retractall(_, empleados)

Germán Vidal 14IDR – Práctica 3 Curso 2007/08 Ejercicio Repetir el mismo ejercicio de la sesión anterior (calcular el nombre del empleado más joven) empleando: Repetir el mismo ejercicio de la sesión anterior (calcular el nombre del empleado más joven) empleando: Un procedimiento recursivo Un procedimiento recursivo Los operadores assert/retract, findall, etc Los operadores assert/retract, findall, etc