Prolog

Solo disponible en BuenasTareas
  • Páginas : 8 (1926 palabras )
  • Descarga(s) : 0
  • Publicado : 13 de febrero de 2012
Leer documento completo
Vista previa del texto
TALLER 1

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)....
tracking img