Programación lógica

Índice

  1. Magos
  2. Oraciones
  3. Crucigrama
  4. Trenes
  5. Árbol binario
  6. Traducir
  7. Lista duplicada
  8. Palíndromo
  9. Acertijo

Magos

Sea la siguiente base de datos:

mago(ron).
tieneVarita(harry).
juegaQuidditch(harry).
mago(X):- tieneEscoba(X), tieneVarita(X).
tieneEscoba(X):- juegaQuidditch(X).

Cómo responde Prolog a las siguientes consultas?

mago(ron).
bruja(ron).
mago(hermione).
bruja(hermione).
mago(harry).
mago(Y).
bruja(Y).

Oraciones

Sea la siguiente base de datos:

palabra(determinante,el).
palabra(determinante,un).
palabra(nucleo,pez).
palabra(nucleo,'alfajor triple').
palabra(verbo,come).
palabra(verbo,compra).

oracion(Palabra1,Palabra2,Palabra3,Palabra4,Palabra5):-
   palabra(determinante,Palabra1),
   palabra(nucleo,Palabra2),
   palabra(verbo,Palabra3),
   palabra(determinante,Palabra4),
   palabra(nucleo,Palabra5).

¿Qué consulta hay que hacer para averiguar todas las oraciones posibles? Listar los resultados que generará Prolog en el orden esperado.

Crucigrama

Sean las palabras en italiano:

astante , astoria , baratto , cobalto , pistola , statale .

Se desea aplicarlas en el siguiente crucigrama:

Escribir una base de datos y una consulta que encuentre una solución al problema.

Trenes

Sean las siguientes cláusulas que describen algunas localidades que están conectadas con un tramo de tren:

trenDirecto(saarbruecken,dudweiler).
trenDirecto(forbach,saarbruecken).
trenDirecto(freyming,forbach).
trenDirecto(stAvold,freyming).
trenDirecto(fahlquemont,stAvold).
trenDirecto(metz,fahlquemont).
trenDirecto(nancy,metz).

Escribir un predicado viajar/2 que permita averiguar si es posible o no viajar de una localidad a otra, ya sea en uno o más tramos de tren. Por ejemplo, viajar(nancy,saarbruecken) debe dar verdadero.

Árbol binario

Sea la siguiente representación de un árbol binario:

  • Una hoja se representa con hoja(Valor). Por ejemplo: hoja(3), hoja(7).
  • Dados dos árboles B1 y B2 se pueden combinar con arbol(B1, B2).

Definir el predicado espejo/2 que produzca la imagen espejada de un árbol binario. Por ejemplo:

?- espejo(arbol(arbol(hoja(1), hoja(2)), hoja(4)), T).
T = arbol(hoja(4), arbol(hoja(2), hoja(1))).

Traducir

Sea la siguiente base de datos:

traduccion(eins,uno).
traduccion(zwei,dos).
traduccion(drei,tres).
traduccion(vier,cuatro).
traduccion(fuenf,cinco).
traduccion(sechs,seis).
traduccion(sieben,siete).
traduccion(acht,ocho).
traduccion(neun,nueve).

Escribir el predicado traduccionLista(A,E) que produzca la traducción de una lista de números etre alemán y español. Por ejemplo,

?- traduccionLista([eins,neun,zwei], X).
X = [uno,nueve,dos].
?- traduccionLista(X, [uno,siete,seis,dos]).
X = [eins,sieben,sechs,zwei].

Lista duplicada

Una lista es duplicada si está compuesta por dos bloques consecutivos de los mismos elementos. Por ejemplo [a,b,c,a,b,c] es duplicada. Escribir un predicado duplicada(Lista) que determine si la lista es duplicada o no.

Palíndromo

Escribir el predicado palindromo(Lista) que determine si la lista es palindrómica. Por ejemplo: palindromo([n,e,u,q,u,e,n]) debe dar verdadero.

Acertijo

Difícil

En una calle hay tres casas contiguas de diferentes colores: rojo, azul y verde. Sus habitantes son de diferentes nacionalidades, y tienen una mascota diferente. Aquí hay algunos hechos conocidos:

  • Los uruguayos vive en la casa roja.
  • El jaguar es la mascota de la familia española.
  • Los japonenes viven a la derecha de los que tienen un caracol.
  • Los dueños del caracol viven a la izquierda de la casa azul.

¿Quién tiene una cebra? Escribir un predicado cebra/1 que indique la nacionalidad de los dueños de la cebra.


Soluciones Ver