Está en la página 1de 2

UTN – FRM: Paradigmas de Programación

6. BÚSQUEDA DE OBJETIVOS

6.1. Representación de datos


Si hemos definido en la base de datos del sistema el siguiente conjunto de hechos y reglas:
nacionalidad( ‘Alfredo’, ‘Argentino’ ).
nacionalidad( ‘Jaime’, ‘Uruguayo’ ).
nacionalidad( ‘Beto’, ‘Chileno’ ).
nativo_de( ‘Alfredo’, ‘Sudamericana’ ).
nativo_de( ‘Jaime’, ‘Sudamericana’ ).
nativo_de( ‘Beto’, ‘Sudamericana’ ).
nativo_de( Persona, ‘Sudamericano’ ):-
nacionalidad( Persona, ‘Argentino’ );
nacionalidad( Persona, ‘Uruguayo’ );
nacionalidad( Persona, ‘Chileno’ ).

Luego al preguntar:
?- nativo_de( ‘Alfredo’, ‘Sudamericano’ ).
o
?- nativo_de( ‘Jaime’, ‘Sudamericano’ ).
o
?- nativo_de( ‘Bety’, ‘Sudamericano’ ).

Observemos que la variable Persona en la regla, va a ser instanciada para diferentes personas
(‘Alfredo’, ‘Jaime’, ‘Bety’), para cada pregunta que sea procesada. Así como equipara una pregunta
con un hecho en su base de datos, PROLOG equipara una pregunta con una regla.
Para la primera, la parte ubicada a la izquierda del signo de implicación coincide con la pregunta,
entonces la variable Persona es instanciada con el valor Alfredo, y el segundo argumento es
Sudamericano, entonces la cabecera de la regla queda así:
nativo_de( ‘Alfredo’, ‘Sudamericano’ ):-

...

Entonces tan pronto como la variable Persona instancia el valor Alfredo, en la cabecera de la regla,
la misma variable también es instanciada con Alfredo donde quiera que aparezca en el cuerpo (parte
derecha) de la regla.
De este modo la regla queda:
nativo_de( ‘Alfredo’, ‘Sudamericano’ ):-
nacionalidad( ‘Alfredo’, ‘Argentino’ );
nacionalidad( ‘Alfredo’, ‘Uruguayo’ );
nacionalidad( ‘Alfredo’, ‘Chileno’ ).
UTN – FRM: Paradigmas de Programación

Pero antes de que la regla pueda ser considerada como verdadera y por lo tanto que el sistema
conteste yes, el cuerpo de la regla debe ser verdadero, y este último sólo va a ser evaluado como
cierto si se puede encontrar un hecho (o una regla) que indique que Alfredo efectivamente es
Argentino, Uruguayo o Chileno.
Para esto se empieza a recorrer la base de datos desde el comienzo, hasta que se encuentra el hecho:
nacionalidad( ‘Alfredo’, ‘Argentino’ ).

Por lo tanto el cuerpo de la regla es verdadero y se puede implicar que la cabecera también lo es,
entonces el sistema responde: yes.
Ahora se muestra un esquema donde, las líneas llenas indican la secuencia de búsqueda de objetivos
y las líneas de trazos, la secuencia de regreso (metas satisfechas).
?- es_nativo(‘Alfredo’, ‘Sudamerica’). VERDAD

es_nativo(‘Alfredo’, ‘Sudamerica’) :-
nacionalidad( ‘Alfredo’, ‘Argentino’ );
nacionalidad( ‘Alfredo’, ‘Uruguayo’);
nacionalidad( ‘Alfredo’, ‘Chileno’ ).

nacionalidad( ‘Alfredo’, ‘Argentino’ ).


nacionalidad( ‘Jaime’, ‘Uruguayo’ ).
nacionalidad( ‘Beto’, ‘Chileno’ ).

También podría gustarte