Bratko cap 1

Páginas: 24 (5926 palabras) Publicado: 22 de marzo de 2013
Capitulo 1
UNA VISTA GENERAL DE PROLOG








1.1 Un programa ejemplo: definiendo relaciones familiares.
1.2 Extendiendo el programa ejemplo por medio de reglas.
1.3 Definición de una regla recursiva.
1.4 Como Prolog responde a las consultas.
1.5 Significado declarativo y procedural de los programas.




Este capitulo revisa los mecanismos básicos de Prolog a través de unprograma Ejemplo. Aunque el tratamiento es ampliamente informal se introducen muchos conceptos importantes como: Cláusulas Prolog, hechos, reglas y procedimientos. El mecanismo integrado de retrocedimiento (backtracking) de Prolog y la se discute la diferencia entre el significado declarativo y por procedimientos de un programa.

1.1 Un programa ejemplo: definiendo relaciones familiares.Prolog es un lenguaje de programación para computación simbólica, no numérica. Esta especialmente diseñado para resolver problemas que involucren objetos y relaciones entre objetos. La figura 1.1 muestra un ejemplo: una relación familiar. El hecho de que Tom sea padre de Bob puede ser escrito en Prolog como:

padre( tom, bob ).


Figura 1.1 Un árbol de familia

Aquí seleccionamos padre( genérico) como el nombre de una relación; Tom y Bob son los argumentos. Por razones que llegaran a aclararse mas tarde escribimos nombres como tom con una letra inicial minúscula. El árbol familiar completo de la Figura 1.1 esta definido por el siguiente programa en Prolog:

padre( pam, bob ).
padre( tom, bob ).
padre( tom, liz ).
padre( bob, ann ).
padre( bob, pat ).
padre( pat, jim ).Este programa consiste de seis cláusulas. Cada una de estas declara un hecho de la
relación padre. Por ejemplo, padre( tom, bob ) es una instancia particular de la relación padre. Tal instancia se llama también relación. En general, una relación es definida como el conjunto de todas estas instancias.

Cuando este programa ha sido comunicado al sistema Prolog. A Prolog se le pueden plantear algunasconsultas sobre la relación padre. Por ejemplo: ¿Es Bob padre de Pat?. Esta pregunta puede ser comunicada al sistema de Prolog tecleando en la terminal:

?- padre( bob , pat ).

Habiendo encontrado esto como un hecho acertado en el programa, Prolog contesta:

yes

Una nueva consulta puede ser:

?- padre( liz, pat ).

Prolog contesta

no

porque el programa no menciona acerca deque Liz sea padre de Pat. También contesta ' no' a la pregunta.

?- padre( tom, ben ).

Porque el programa ni siquiera sabe quien es Ben.
Pueden hacerse consultas mas interesantes. Por ejemplo: ¿Quien es el
padre de Liz?

?- padre( X, liz ).

Esta vez la respuesta de Prolog no va a ser "yes" o "no". Prolog nos dirá cual es el valor (aún desconocido) de X, tal que el enunciado de arribasea verdadero. Por lo tanto la respuesta es:

X = tom

La pregunta ¿Quienes son los hijos de Bob? Puede ser transmitida a Prolog como:

?- padre (bob, X ).

En esta ocasión, existen mas de una posible respuesta. Prolog primero contesta con una solución:

X = ann

Ahora podemos pedir otra solución (en muchas implementaciones de Prolog tecleando un punto y coma) y Prolog encontrará:

X= pat

Si pedimos mas soluciones, Prolog contestará "no" , porque todas las soluciones han terminado.
A nuestro programa se le puede hacer una pregunta mas amplia: ¿Quien es padre de quien? Otra manera de formular esta pregunta es:

Encuentra X y Y tal que X sea padre de Y.

Esto es expresado en Prolog por:

?- padre( X, Y ).

Prolog ahora busca todo los pares padre - hijo uno despuésde otro. Las soluciones se desplegaran una a la vez tan prolongado como le digamos a Prolog, que queremos mas soluciones, hasta que todas las soluciones se hayan encontrado. Las respuestas son mostradas como:

X = pam
Y = bob;

X = tom
Y = bob;

X = tom
Y = liz;

. . .

Podemos parar el flujo de soluciones tecleando, por ejemplo un punto en lugar de un punto y coma (esto depende de...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • CAP 1
  • cap 1
  • Cap 1
  • Cap. 1
  • cap 1
  • CAP 1
  • Cap 1
  • cap 1