TP Prolog

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 12

Joaquin tomas Perez Ale

52823
Paradigmas de Programación
Universidad Tecnológica Nacional
Facultad Regional Tucumán

Tema: Paradigma Ló gico Prolog

A – Generar un archivo TP2-Prolog-Legajo.doc para los siguientes puntos.

1. Realice un cuadro comparando el paradigma Imperativo, Funcional y Ló gico.

2. Con sus palabras explique lo que entiende de ló gica proposicional.

Ló gica proposicional refiere a la ló gica entre proposiciones, a las diferentes operaciones que
podemos aplicar entre proposiciones que nosotros consideremos verdaderas o falsas y como
esto nos lleva a conseguir nuevas proposiciones.

3. Describa los componentes de un programa en Prolog y ejemplifique un pequeñ o programa.

Hechos: Expresan relaciones entre objetos. Supongamos que queremos expresar el hecho de
que "un coche tiene ruedas". Este hecho, consta de dos objetos, "coche" y "ruedas", y de una
relació n llamada "tiene". La forma de representarlo en PROLOG es: tiene(coche, ruedas).

 Los nombres de objetos y relaciones deben comenzar con una letra minú scula.
 Primero se escribe la relació n, y luego los objetos separados por comas y encerrados
entre paréntesis.
 Al final de un hecho debe ir un punto (el cará cter ".").

El orden de los objetos dentro de la relació n es arbitrario, pero debemos ser coherentes a lo largo de
la base de hechos.
Variables: Representan objetos que el mismo PROLOG determinará . Una variable puede
estar instanciada ó  no instanciada. Estará instanciada cuando existe un objeto determinado representado
por la variable. De este modo, cuando preguntamos "¿Un coche tiene X?", PROLOG busca en los hechos
cosas que tiene un coche y respondería:

X = ruedas.

Instanciando la variable X con el objeto ruedas.

Los nombres de variables comienzan siempre por una letra mayú scula. Un caso particular es la variable
anó nima, representada por el cará cter subrayado ("_"). Es una especie de comodín que utilizaremos en
aquellos lugares que debería aparecer una variable, pero no nos interesa darle un nombre concreto ya
que no vamos a utilizarla posteriormente.

Reglas Las reglas se utilizan en PROLOG para significar que un hecho depende de uno ó mas hechos. Son
la representació n de las implicaciones ló gicas del tipo p ---> q (p implica q).

 Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".
 La cabeza está formada por un ú nico hecho.
 El cuerpo puede ser uno ó mas hechos (conjunció n de hechos), separados por una coma (","), que
actú a como el "y" ló gico.
 Las reglas finalizan con un punto (".").

La cabeza en una regla PROLOG corresponde al consecuente de una implicació n ló gica, y el cuerpo al
antecedente. Este hecho puede conducir a errores de representació n. Supongamos el siguiente
razonamiento ló gico:

tiempo(lluvioso) ----> suelo(mojado)

suelo(mojado)

Que el suelo esté mojado, es una condició n suficiente de que el tiempo sea lluvioso, pero no necesaria.
Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicació n, que esté lloviendo
(pueden haber regado las calles). La representació n correcta en PROLOG, sería:

suelo(mojado) :- tiempo(lluvioso).

suelo(mojado).

Operadores: Son predicados predefinidos en PROLOG para las operaciones matemá ticas bá sicas. Su
sintaxis depende de la posició n que ocupen, pudiendo ser infijos ó prefijos. Por ejemplo el operador suma
("+"), podemos encontrarlo en forma prefija '+(2,5)' ó bien infija, '2 + 5'. También disponemos de
predicados de igualdad y desigualdad.

X = Y igual
X \= Y distinto
X < Y menor
X > Y mayor
X =< Y menor o igual
X >= Y mayor o igual

Al igual que en otros lenguajes de programació n es necesario tener en cuenta la precedencia y


la asociatividad de los operadores antes de trabajar con ellos.
4. Suponiendo que esMadre(X,Y) indica que X es la madre de Y, exprese en lenguaje natural lo
que significan las preguntas:

?- esMadre (X, maría).


Alguien es madre de maría

?- esMadre (_,maría).
Todos son madre de maría

?- esMadre (X,_).
Alguien es madre de todos

?- esMadre (_,_).
Todos son madre de todos

?- esMadre (_,X).
Todos son madre de alguien

?- esMadre (X,Y).
Alguien es Madre de Alguien

?- esMadre (personaQueNoExiste, maría).


personaQueNoExiste es madre de maría

B – Generar los archivos necesarios *.pl para los siguientes puntos.

1. Suponiendo que el predicado gusta (X, Y) indica que a X le gusta Y, escriba los objetivos
que habría que definir en Prolog para contestar las siguientes preguntas:

- ¿Le gusta algo a Juan?


gusta(‘Juan’, _).

- ¿Le gustan a Juan las almendras


gusta(‘Juan’, almendras).

- ¿Qué es lo que le gusta a Juan?


gusta(‘Juan’,X).

2. Represente en Prolog los siguientes hechos:

-Pedro quiere a María.


quiere('pedro','maria').

-Pedro quiere a Belén.


quiere('pedro','belen').

-Manuel quiere a Belén.


quiere('manuel','belen').
-María quiere a Pedro.
quiere('maria','pedro').

-Todos quieren a Juan y a María.


quiere(_,'maria').
quiere(_,'juan').

-Todo el mundo se quiere a sí mismo.


quiere(X, X).

-Alguien quiere a Juan y a Pedro.


quiere(X,'juan').
quiere(X,'pedro').

-Alguien quiere a María.


quiere(X,'maria').

-Alguien quiere a todos los demá s.


quiere(X,_).

también los predicados para responder:

-¿Quiere Manuel a María?


quiere(‘manuel’,’maria’).

-¿Quiere Manuel a María y a Pedro?


quiere('manuel','maria');quiere('manuel','pedro').

-¿Quiere Manuel a alguien?


quiere('manuel',_).

-¿Quiénes son los que quieren a María?


quiere(X,'maria').

-¿Quiénes son los que quieren a Pedro?


quiere(X,'pedro’).

-¿Quiénes son los que se quieren mutuamente?


quiere(X,Y); quiere(Y,X);

-¿Quiénes son los que se quieren a sí mismos?


quiere(X,X).

-¿Se quiere Manuel a sí mismo?


quiere('manuel', 'manuel').
-¿Hay alguien que quiera a María?
quiere(_,'maria').

-¿Hay alguien que quiera a alguien?


quiere (_,_).

-¿Hay alguien que se quiera a sí mismo?


quiere(x,x).

-¿Hay alguien que quiera a todo el mundo?


quiere(x,_).

3. Se necesita un sistema que devuelva las siguientes categorías segú n las edades de esta familia.
Para ello debemos considerar que una persona es:

✓ Bebé desde que nace hasta que tiene 2 añ os de edad inclusive.


✓ Niñ o desde los 3 hasta los 9 añ os de edad inclusive.
✓ Adolescente desde los 10 hasta los 20 añ os de edad inclusive.
✓ Adulto desde los 21 hasta los 69 añ os de edad inclusive.
✓ Anciano desde los 70 añ os de edad en adelante.

a) En base a esto, desarrollar las clá usulas que represente y que responda en qué categoría se
encuentra cada uno de sus familiares, teniendo en cuenta el siguiente á rbol:

Convierte en Prolog las siguientes preguntas en consultas, ejecú talas y obtiene los resultados.
✓ ¿Oscar es bebe?

✓ ¿Listar los bebes? categoria(X,'bebe').


✓ ¿Matías es niñ o?

✓ ¿Marcelo es adolescente?

✓ ¿Listar los adultos?

✓ ¿Juan es anciano? ¿Juan tiene 95?

✓ ¿Cuá ntos añ os tiene María?

✓ ¿Quiénes tienen 5 añ os?


b) Agregar reglas que determinen cuando una persona es mayor que otra, menor que otra y de la
misma edad que otra.
Convierte en Prolog las siguientes preguntas en consultas, ejecú talas y obtiene los resultados.

✓ ¿María es mayor a que personas?

✓ ¿Juan es mayor a que personas?

✓ ¿Analía es menor a que personas?

✓ ¿Oscar tiene igual edad a que personas?


c) Se debe cargar como hecho las relaciones de padre, madre y de esposo, luego crear las reglas
para: hermano, hijo, tío, sobrino, primo, abuelo, nieto, bisabuelo, bisnieto, cuñ ado.
Convierte en Prolog las siguientes preguntas en consultas, ejecú talas y obtiene los resultados.

✓ ¿Quiénes son hermanos de Juan?


✓ ¿Quiénes son hermanos de Rafaella?

✓ ¿De quién es padre de Sara?

✓ ¿Quiénes son hijos de Martin?

✓ ¿Analía es tía de Martin?

✓ ¿liste todos los primos?


✓ ¿Ana es abuela de Matías?

✓ ¿Rafaella es nieta de Juan?

✓ ¿Matías de quien es bisnieto?


✓ ¿De quién es bisabuelo Juan?

4. Escriba un programa que cuente el nú mero de veces que un elemento se encuentra repetido en
una lista.

5. Escriba un programa en Prolog que borra un elemento de una lista, el resultado se guardará en
otra lista nueva. Por ejemplo, el resultado de borrar el valor a de la lista [b,a,g,a,h,b], sería la nueva
lista formada por [b,g,h,b].

6. Escriba un programa en Prolog que inserte de forma ordenada un entero en una lista ya
ordenada de enteros. NOTA: Guarde el resultado en una segunda lista.
7. Escriba un programa en Prolog que quite las repeticiones de elementos de una lista, guardando
el resultado en una segunda lista. Por ejemplo, si tenemos [a,b,h,b,a,j] se obtendría como resultado
la lista [a,b,h,j].

8. Dada la siguiente base de conocimiento, donde se indica cada materia que cursa cada alumno:

cursa(pedro, paradigmas).
cursa(mario, paradigmas).
cursa(pedro, operativos).
cursa(sara, sintaxis).

Las clá usulas deberá n responder a las soluciones con findall/3:


a) Todas las materias que alguien cursa

b) Todos los pares de estudiantes y materia que cursa que hay en la base ce conocimiento.

9. Librería “San Pablo” tiene en su base del conocimiento los siguientes productos indicando su
descripció n y precio:
✓ producto(cuaderno,570).
✓ producto(lapiz,50).
✓ producto(goma,25).
✓ producto(compaz,150).
✓ producto(carpeta,255).
✓ producto(folios,20).
✓ producto(cartuchera,920).

Las reglas que indican cada compra realizada por los clientes detallando el producto en su
descripció n y cantidad.

✓ compra(camila, producto(cuaderno,180)).
✓ compra(camila, producto(lapiz,55)).
✓ compra(lisandro, producto(compaz,39)).
✓ compra(lisandro, producto(goma,50)).
Se pide desarrollar haciendo uso de findall clá usulas de Horm que:

a) Se contabilice cuantos productos compro un cliente determinado.

b) Cuanto gasto un cliente.

El enunciado tiene un error ya que primero dice que en la base de conocimiento las reglas
producto(x,y), y es el precio, mientras que luego dice que dicha regla indica la cantidad.

Plantearemos una solució n, dejando a y como el precio y agregando otra variable en la regla
compra, que será la cantidad.

c) Se detalle en una lista, las compras realizadas en la librería.

[(Cliente,Producto,Cantidad,Total), ..., (...)]

10. Dada la siguiente base de conocimiento de la empresa “Amanecer Srl”.


✓ empresa([administració n, personal, produccion]).

Está n registradas todas las secciones de una empresa y la cantidad de personal a cargo.

✓ empleados(administració n,3).
✓ empleados (personal,1).
✓ empleados (produccion,10).

Se sabe cuá ntos empleados trabajan en cada secció n.


✓ sueldoPromedio(administració n, 60000).
✓ sueldoPromedio(personal, 45000).
✓ sueldoPromedio(produccion, 77000).

Se conoce también el sueldo promedio de los empleados de cada secció n.

✓ ventas(180000).

Es la informació n del monto que se recauda en concepto de ventas.


Se pide :
a) totalSueldos/2 total de gastos de sueldos.

b) porcentaje/3 que afirme que el recorte es nulo cuando los ingresos superan el total de
gastos.
c) porcentaje/3 que plantee que si las ventas con menores a los gastos, se resulta las
operaciones aritméticas del cá lculo porcentual.

También podría gustarte