Prolog
Prolog es un lenguaje de programación hecho para representar y utilizar el conocimiento que se tiene sobre un determinado dominio. Más exactamente, el dominio es un conjunto de objetos y el conocimiento se representa por un conjunto de relaciones que describen las propiedades de los objetos y sus interrelaciones. Un conjunto de reglas que describa estas propiedades y estas relacioneses un programa Prolog.Un programa Prolog está formado por una secuencia de enunciados: hechos,reglas y comentarios.
Una relación puede estar especificada por hechos, simplemente estableciendo n-tuplas de objetos que satisfacen la relación o por reglas establecidas acerca de la relación
Construya un arbol de demostración para ancestro(olga,X).
padre(alberto,juan).
madre(julia,juan).padre(pedro,maria).
madre(helena,maria).
padre(juan,olga).
madre(maria,olga).
padre(juan,’Alberto Jr.’).
progenitor(X,Y) :- padre(X,Y).
progenitor(X,Y) :- madre(X,Y).
ancestro(X,Y) :- progenitor(X,Y).
ancestro(X,Y) :- progenitor(X,Z),ancestro(Z,Y).
ancestro(olga,X).
ancestro(olga,_G384).
Progenitor(olga,_G384)
padre(olga,_G384)madre(olga,_G384)
X O
SUMA
suma(0,X,X).
suma(s(X),Y,Z):- suma(X,s(Y),Z).
MULTIPLICACION
mult(0,X,0).
mult(s(X),Y,Z) :- mult(X,Y,U),suma(U,Y,Z).
MANEJO DE LISTAS
lista(nil).
lista(cons(X,L)) :- lista(L).
CONCATENACIÓN DE LISTAS
conc(nil,L,L).
conc(cons(X,L1),L2,cons(X,U)) :- conc(L1,L2,U).
TALLER2
1. Dado el siguiente programa Prolog:
fun(Val, 0) :- Val > 0, Val < 5, !.
fun (Val, 1) :- Val < 14, !.
fun (Val, 2).
¿Cuántas soluciones tiene la consulta?
?- fun (6, X).
b) 1
2. Pregunta. Dada la expresión:
persona(juan, [Y | L]) = F(X, [alegre, aplicado])
arroja como resultado:
c) X=juan, Y=alegre, L=aplicado
3. Pregunta. ¿Cuántos llamadosrecursivos genera el siguiente conjunto de reglas de Prolog, para una lista de n números enteros?
quehago( [ ], R):- R is 0.
quehago( [X], R):- R is X.
quehago( [X, Y | Z ] , R):- quehago(Z, R1), R is (X + Y + R1).
a) n
4. Problema.Escriba una relación en Prolog que permita traducir una lista de números entre 0 y 6 inclusive en loscorrespondientes días de la semana, considerando el día domingo como 0 y el sábado como 6.
listanum(0,domingo).
listanum(1,lunes).
listanum(2,martes).
listanum(3,miercoles).
listanum(4,jueves).
listanum(5,viernes).
listanum(6,sabado).
traducir([],[]).
traducir([X|R],[Y|S]):-listanum(X,Y),traducir(R,S).
5.Problema. Determine si dos números enteros son coprimos. (Dos números son coprimos si su máximo común divisor es igual a 1.)
mcd(X,0,X):- X > 0.
mcd(X,Y,G):- Y > 0, Z is X mod Y, mcd(Y,Z,G).
coprimo(X,Y):- mcd(X,Y,1).
| ?- coprimo(35, 64).
yes
| ?- coprimo(35, 70).
no
6. Problema. Defina en Prolog un predicado split que permite dividir una lista en dos partes, dondese especifica el largo de la primera parte.
split(L,0,[],L).
split([X|Xs],N,[X|Ys],Zs) :- N > 0, N1 is N - 1, split(Xs,N1,Ys,Zs).
| ?- split([carlos,maria,jose,andres,angela,ramon,victor,dario,marta,jorge,beatriz], 4, L1, L2).
L1 = [carlos,maria,jose,andres] ,
L2 = [angela,ramon,victor,dario,marta,jorge,beatriz]
7. Problema. Escriba en Prolog un programa que genere una combinación de Kobjetos de una lista que tiene N elementos. Para ello implemente el predicado: combinacion(K, L, C), donde K es el número de elementos de la combinación C y L es la lista de N elementos desde donde se genera la combinación.
combinacion(0,_,[ ]).
combinacion(K, L, [X | Xs]) :- K > 0, el( X, L, R),
K1 is K-1, combinacion(K1, R, Xs).
el(X, [X | L], L).
el(X, [ _| L], R) :- el(X, L, R)....
Regístrate para leer el documento completo.