Bases de Datos Internas Prolog
Visual Prolog permite definir una base de datos interna compuesta de hechos. Los predicados de
estos hechos deben declarase en la sección DATABASE o FACTS, y se pueden actualizar en tiempo
de ejecución mediante ciertos predicados predefinidos.
La secuencia de hechos para un predicado dado se comporta como una tabla de una base de datos
y, en realidad, Visual Prologlos trata en compilación como si se tratase de una base de datos real.
La definición de un programa que contenga una base de datos interna tiene un aspecto como el
siguiente (ver programa completo al final del documento personas.pro):
domains
nombre, direccion= string
edad = integer
genero= hombre; mujer
database
%tambien se puede definir como: facts - personas
persona(nombre, direccion,edad, genero)
predicates
hombre(nombre, direccion, edad)
mujer (nombre, direccion, edad)
mi_insercion_hombre
mi_insercion_mujer
menu
opcion(char)
clauses
persona("Bibiana", "Coacalco Edo. de Mexico", 39, mujer).
persona("Edgar", "Ecatepec de Morelos", 34, hombre).
hombre (Nombre, Direccion,Edad):- persona (Nombre, Direccion, Edad, hombre).
mujer (Nombre, Direccion,Edad):- persona(Nombre, Direccion, Edad, mujer).
En este ejemplo se usa el predicado persona de la misma forma que el resto de los predicados
(hombre, mujer, menú, opción). La única diferencia es que, en tiempo de ejecución, se pueden
insertar y borrar hechos de tipo persona(. . . ).
Existen dos restricciones al uso de la base de datos:
1. Solo se pueden añadir hechos, no reglas.
2. Los hechos no puedencontener variables desinstanciadas.
Es posible, sin embargo, definir más de una base de datos. Para hacer esto debemos darle nombre
explícito a cada una:
database – personas
persona(nombre, dirección, edad, genero)
database – estudiantes
estudiante (nombre, dirección, edad)
Esta declaración crea dos bases de datos con los nombres personas y estudiantes. Si sólo usamos
una base de datos, no esnecesario darle un nombre, aunque internamente se le asignará el
nombre dbasedom.
Acceso a la Base de datos interna
El acceso a los predicados pertenecientes a la base de datos interna es exactamente el mismo que
el resto de los predicados.
domains
nombre= string
sexo = char
database
persona(nombre,sexo)
clauses
persona(“Elena”, ‘M’).
persona(“Maria”, ‘M’).
persona(“Juan”, ‘H’).Podemos lanzar un objetivo del tipo:
persona(Nombre, ‘M’).
Para encontrar los nombres de todas las mujeres de la base de datos, o bien:
persona(“Elena”, _ ).
Para comprobar si Elena pertenece a nuestra base de datos interna.
Actualización de la base de datos
Los hechos de la base de datos interna se pueden escribir directamente en el programa, o bien se
pueden insertar o eliminar en tiempo deejecución. Disponemos de los predicados predefinidos:
assert, asserta, assertz, retract, retractall, consult, y save. Estos predicados pueden tomar uno o
dos argumentos.
1. Inserción de hechos, para ello se dispone de los predicados:
Para insertar un nuevo hecho al principio de los hechos ya existentes de un
predicado dado:
asserta (hecho)
asserta(hecho, nombre de la base de datos)
Para insertar un nuevo hecho al final de los hechos ya existentes de un predicado
dado:
assertz (hecho)
assertz(hecho, nombre de la base de datos)
o
assert (hecho)
assert(hecho, nombre de la base de datos)
El segundo argumento es siempre opcional, ya que los nombres de los predicados deben
ser únicos (aunque existan varias bases de datos en un programa), con lo que Prolog sabeperfectamente dónde debe insertarlo. Sin embargo, si se quiere comprobar que lo
estamos insertando en el lugar correcto se pueden utilizar las versiones que manejan dos
argumentos.
Por ejemplo, si tenemos un programa que contiene los hechos:
persona(“Rosa”, ”Magnolias 123”, 35).
persona(“Víctor”, “Cerezos 134”, 37).
Y lanzamos los objetivos:
assertz(persona(“José”, “Colorines 34”, 39))....
Regístrate para leer el documento completo.