6. Operadores en PROLOG

Documentos relacionados
5. Entrada y Salida en PROLOG

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

4. Predicados predefinidos

Programación n Declarativa: Lógica y Restricciones

Tema 12.- Entrada y Salida

Predicados Básicos de Prolog TAII(I) - Curso

Tema 2. La Sintaxis. 1. El vocabulario de un programa PROLOG

Programación Exploratoria - Predicados Predefinidos en Prolog -

Metaprogramación. Ingeniería Informática. Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Predicados Extra-lógicos. Predicados Extra-lógicos. Contenido. Prolog = Programación lógica. Programa (cláusulas de Horn)

INTRODUCCIÓN BÁSICA. Ingeniería Informática AL PROLOG. Departamento de Informática

TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato

Introducción a PROLOG

el proceso de backtracking.

Programación en PROLOG(1)

Tema 2: Listas, aritmética y operadores

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

Escuela Normal Superior N 40 Mariano Moreno. Cuadernillo Propedéutico 2017 Nivel Superior

PHP: Lenguaje de programación

Tema III Predicados Extralógicos de PROLOG

Listas. Listas. Listas. Listas y Corte en Prolog. Temas Avanzados en Ingeniería Informática I (Lógica) David Camacho Fernández.

Tema 6: Representación lógica del conocimiento

El lenguaje C. 1. Identificadores, constantes y variables

Prolog. Sintaxis Informal. Sintaxis Informal. Hechos: ejemplos. Inteligencia Artificial 2º cuatrimestre de Hechos. Hechos. Reglas.

Programación declarativa ( )

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

Programación lógica Curso Tema 2: Prolog. José A. Alonso Jiménez.

Práctica II. Prolog II: Meta Intérprete Vanilla

Introducción a Haskell. El lenguaje Haskell

Trabajo Práctico N o 1 - Programación Lógica Fecha de entrega: 19/05/2005 hasta las 21hs

Trabajo Práctico 2 Programación Lógica

INTRODUCCIÓN A PROLOG

UNIVERSIDAD AUTÓNOMA DE GUERRERO UNIDAD ACADÉMICA DE MATEMÁTICAS. Apuntes de. PROGRAMACIÓN EN PROLOG Segunda Edición

Inteligencia en Redes de Comunicaciones. Prolog. Julio Villena Román.

LENGUAJES DE PROGRAMACIÓN

Metodología de Programación I Tutorial de Prolog (3/3)

PROgramación LOGica PROLOG. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Principios de Computadoras II

Expresiones Lógicas y Operadores sobre Bits

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

PROgramación LOGica PROLOG

Inteligencia Artificial: Prolog

23/09/2009. Introducción Hello word La familia Buendía Recursión Listas

Tema 4. Operadores y Expresiones

Tema 3.- Predicados y sentencias condicionales

Listas en Prolog. Capítulo. Listas como sujetos

Inteligencia Artificial: Prolog

Unidad II: Análisis semántico

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Inteligencia Artificial II Prolog I

Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!

Programación n en Prolog

Guía 2: Listas, recursión e inducción

Operadores y Expresiones

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2.

Tema 2. Tipos predefinidos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

PROgramación LOGica PROLOG. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Tema 3. Patrones y Definiciones de Funciones

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Tema 2.- Expresiones y funciones

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Inteligencia en Redes de Comunicaciones - 04a Prolog

Lenguajes de Programación. Capítulo 4. Expresiones.

Conceptos Fundamentales. Programación Lógica y Funcional MTI. Eduardo Cruz Romero

Inteligencia Artificial: Prolog

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Sistemas Inteligentes de Gestión. Tutorial de PROLOG

JavaScript: Operadores

Representación del conocimiento mediante reglas (2011/2012)

Transcripción:

6. Operadores en PROLOG 1. Definición de operadores propios 2. Operadores predefinidos Igualdad Entrada y Salida básicos Manejo de ficheros Evaluación de expresiones aritméticas Comparación de números Introducción de nuevas cláusulas

6. Operadores en PROLOG 2. Operadores predefinidos (cont.) Cumplimiento y fracaso de objetivos Clasificación de términos Manejo de cláusulas como términos Construcción y acceso a componentes de estructuras Control de la re-evaluación Metavariables

1. Declaración de operadores (I) Utilización de un predicado predefinido:?- op(precedencia, Tipo, Nombre).?- op(500, yfx, por). yes?- X= a por b. X= a por b Precedencia Є [1, 1200] y depende de implementaciones. Tipo: Aridad Notación o posición Infijo: xfy, yfx, xfx, yfy (f representa operador; x e y operandos) Prefijo: fx, fy. Sufijo: xf, yf

Declaración de operadores (II) Asociatividad: y indica que el argumento puede contener operadores de igual o menor precedencia. x obliga a que sea estrictamente menor. Ejemplo: + declarado como yfx. a+b+c : a+(b+c) ó (a+b)+c La primera opción queda eliminada porque el segundo argumento no puede contener un operador de precedencia igual. Esto se conoce como asociatividad por la izquierda (yfx), por la derecha (xfy) o indistintamente (xfx); según esto, no tendría sentido (yfy).

2. Operadores predefinidos Ya hemos visto: Pueden tener efectos laterales al satisfacerse, además de instanciar variables. Ejemplo: corte Pueden forzar a que los argumentos sean de un cierto tipo. Ejemplo: < necesita dos argumentos numéricos Definiremos los predicados que deberían formar el núcleo del intérprete PROLOG, aunque habrá que revisarlos para cada versión

2.1. Igualdad X = Y. Unificación: intenta hacer X e Y iguales mediante unificación. X \= Y. Su opuesto: no unifican X == Y. Identidad Más restrictivo que X = Y. Se satisface si X = Y, pero no necesariamente a la inversa.?- X = Y.?- X == X.?- X = Y, X == Y.?- append([a B], C) == append(x, Y).?- append([a B], C) == append([a B], C). X \== Y. Su opuesto.

2.2. Entrada y Salida básicos Lectura read(x), get0(x), get(x) Escritura write(x), display(x) put(x) Formato: nl tab(x) skip(+code) skip(a).

2.3. Manejo de ficheros Lectura: see(x), seeing(x), seen Escritura: tell(x), telling(x), told

2.4. Evaluación de expresiones aritméticas X is Y. Fuerza la evaluación de Y para unificar con X. Los siguientes sólo se evalúan si están a la derecha de is: X + Y. X Y. X * Y. X / Y. X mod Y.

2.5. Comparación de números X = Y. X \= Y. X < Y. X > Y. X >= Y. X =< Y.

2.6. Introducción de nuevas cláusulas consult(x). Añade nuevas clausulas. Si ya están definidos predicados, añade clausulas al final.?- consult(fichero).?- consult(fichero1), consult(fichero2). reconsult(x). Las clausulas leidas substituyen a las actuales.?- reconsult(fichero3), reconsult(fichero4). Notación de lista: fichero para consult. -fichero para reconsult.?- [fichero1, - fichero3.pl, fichero2.pl, - fichero4.pl ]

2.7. Cumplimiento y fracaso de objetivos true siempre se cumple fail siempre fracasa Utilidades:...,!, fail. si la ejecución llega hasta este punto, debemos dejar de intentar satisfacer el objetivo: fail lo hace fracasar y el corte anula la re-satisfacción.,!, genera(x), muestra(x), fail. queremos recorrer todas las soluciones de un objetivo y, por ejemplo, mostrarlas.

2.8. Clasificación de términos Permiten seleccionar ciertos tipos de términos para ser utilizados en las clausulas: var(x) se satisface si en ese momento X es una variable no instanciada permite saber si una variable ya tiene o no un valor, pero sin fijárselo como efecto lateral?- var(x). yes?- var(23). no?- X = Y, Y = 23, var(x).? nonvar(x) comportamiento opuesto al anterior

Clasificación de términos (II) atom(x) se cumple si X identifica en ese momento un átomo?- atom(23). no?- atom(libros). yes?- atom( esto es una cadena ).? integer(x) se satisface si X representa en ese momento a un entero atomic(x) se cumple si en ese momento X es un entero o un átomo atomic(x):- atom(x). atomic(x):- integer(x).

2.9. Manejo de cláusulas como términos PROLOG permite al programador examinar y modificar otros programas PROLOG: construir estructuras que representen cláusulas añadir clausulas retirar clausulas Para PROLOG una cláusula es una estructura le_gusta_a(juan, X) :- le_gusta_a(x, vino). Una clausula es una estructura cuyo functor principal es :- y cuyos argumentos son cabeza y cuerpo de la clausula. :- (le_gusta_a(juan, X), le_gusta_a(x, vino)) Si la cola tiene varios términos, deben considerarse unidos por el functor,. abuelo(x, Z):- padres(x, Y), padres(y,z). :- (abuelo(x, Z),, (padres(x,y) padres(y,z)))

Manejo de cláusulas como términos (II) listing(a). Se muestran por el canal de salida activo todas las cláusulas asociadas al átomo al que esté instanciado A. El formato depende del intérprete. Útil para descubrir errores. Ejemplo:?- [recorrer_fichero].?- listing(mostrar_fichero). mostrar_fichero :- write('nombre de fichero: '), read(a), see(a), muestra_contenido, seen.

Manejo de cláusulas como términos (III) clause(x, Y). Si se satisface hace coincidir X e Y con la cabeza y el cuerpo de una cláusula existente. Si no, falla. Si no hay cláusulas asociadas, fracasa. X debe tener información para identificar el predicado principal. Se instancia a la primera cláusula y si se re-satisface, irán instanciándose a las siguientes cláusulas. Para los hechos instancia el cuerpo a true. Ejemplo: añadir_sin_duplicar(x, L, L):- member(x, L),!. añadir_sin_duplicar(x, L, [X L]).?- clause(añadir_sin_duplicar(x, U, V), Y). U=V Y = member(x,l),! ; V = [X U] Y = true.

Manejo de cláusulas como términos (IV) asserta(x), assertz(x). Añade una nueva clausula a la BC: asserta() lo hace al principio de la misma y assertaz() al final. X debe estar suficientemente instanciada ser una cláusula válida. Una vez satisfecho, no se deshace aunque haya reevaluación. La única forma de eliminar entonces la cláusula es con: retract(x). X debe estar suficientemente instanciada para identificar una cláusula válida. Si se satisface, elimina la primera cláusula. Si se reevalúa, eliminará las siguientes.

2.10. Construcción y acceso de componentes de estructuras Se pueden escribir programas con cláusulas que hagan referencia a estructuras arbitrarias functor(t, F, N). T es una estructura con functor F y aridad N Si T está instanciada, fracasará si T no es un átomo o una estructura. Si no fracasa, nos dará el functor F y su aridad N Si T no está instanciada, deben estarlo F y N. T devolverá las estructuras que verifiquen F y N. Ejemplos:?- functor(a+b, F, N). F = +, N = 2?- functor([a, b, c], F, N). F =., N = 2?- functor([a, b, c],., 3). No

Construcción y acceso de componentes de estructuras (II) arg(n, T, A). N debe indicar una posición en los argumentos de T Ambos deben estar instanciados A será el argumento N-ésimo de T X =.. L Llamado históricamente univ L es la lista que consiste en el functor de X seguido de los argumentos de X Permite: a) obtener todos los argumentos de una estructura b) construir una estructura a partir de una lista Ejemplo:?- algo(a, b, c) =.. L. L = [algo, a, b, c]

Construcción y acceso de componentes de estructuras (III) Ejemplo:?- X =.. [f, a, b, c]. X = f(a, b, c). name(a, L) Permite manejar átomos arbitrarios Relaciona un átomo, A, con la lista de caracteres ASCII que lo compone, L Ejemplos:?- name(prueba, X). X = [112, 114, 117, 101, 98, 97]?- name(prueba, prueba ). yes?- name(x, [112, 114, 117, 101, 98, 97]). X = prueba

2.11. Control de la reevaluación Predicado predefinido corte ó! Detiene la búsqueda de nuevas soluciones repeat Permite buscar soluciones alternativas. Sería equivalente a tener definido: repeat. repeat :- repeat. Se usa en combinación con corte y fail echo :- repeat, read(x), echo(x),!. echo(x):- X=end_of_file,!. echo(x):- write(x), nl, fail.

2.12. Metavariables call(x) el objetivo call(x) se cumple si se satisface X como objetivo?- padre(x).?- call(padre(x)).?-meta=..[padre,x], call(meta). not(x) \+ padre(x). not(padre(x)). X, Y conjunción de objetivos X ; Y disyunción de objetivos