Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % GUILLERMO DE JESÚS
- % SANTIAGO SANTANA
- % PRÁCTICO 1
- % EJERCICIO 1
- persona(alan).
- persona(pedro).
- persona(jose).
- persona(juan).
- persona(enrique).
- persona(carlos).
- persona(maria).
- enfermedad(gripe).
- enfermedad(gastritis).
- enfermedad(neumonia).
- persona_enfermedad(pedro,neumonia).
- persona_enfermedad(jose,gripe).
- persona_enfermedad(alan, gastritis).
- persona_enfermedad(juan,neumonia).
- persona_enfermedad(enrique,gripe).
- persona_enfermedad(carlos, gastritis).
- persona_enfermedad(maria, gastritis).
- enfermedad_remedio(neumonia, azitromicina).
- enfermedad_remedio(gripe,paracetamol).
- enfermedad_remedio(gastritis,omeprazol).
- % remedio efecto colateral:
- rec(azitromicina, dolor_cabeza).
- rec(paracetamol, dolor_cabeza).
- rec(omeprazol,mareos).
- % EJERCICIO 2
- % factorial(N, R): R es el resultado de aplicar la operación factorial sobre N
- factorial(N, R) :- factorial(N, 1, R).
- factorial(0, R, R) :- !.
- factorial(N, A, R) :-
- N1 is N - 1,
- A1 is A * N,
- factorial(N1, A1, R).
- % fib(N, R): N es el ordinal de R en la secuencia de fibonacci
- fib(0, 1) :- !.
- fib(1, 1) :- !.
- fib(N, R) :-
- N > 1,
- A is N-1,
- A2 is N-2,
- fib(A, R1),
- fib(A2, R2),
- R is R1 + R2.
- % ack(M, N, R): R es el resultado de aplicar la función de ackerman sobre los argumentos M y N
- ack(0, N, R) :- !, R is N + 1.
- ack(M, 0, R) :- !, M2 is M - 1, ack(M2, 1, R).
- ack(M, N, R) :-
- M > 0,
- N > 0,
- !,
- M2 is M - 1,
- N2 is N - 1,
- ack(M, N2, R2),
- ack(M2, R2, R).
- % EJERCICIO 3
- esMadre(M) :- madre(M, _).
- hijo(Hijo, Padre) :- padre(Padre, Hijo), hombre(Hijo).
- hijo(Hijo, Madre) :- madre(Madre, Hijo), hombre(Hijo).
- abuela(A, N) :- madre(A, M), madre(M, N), mujer(A).
- abuela(A, N) :- madre(A, P), madre(P, N), mujer(A).
- hermanos(X, Y) :- madre(M, X), madre(M, Y), padre(P, X), padre(P, Y).
- suegra(Suegra, Esposo) :- pareja-casada(Esposa, Esposo), madre(Suegra, Esposa).
- suegra(Suegra, Esposa) :- pareja-casada(Esposa, Esposo), madre(Suegra, Esposo).
- nuera(Nuera, Suegra) :- pareja-casada(Nuera, Esposo), madre(Suegra, Esposo).
- nuera(Nuera, Suegro) :- pareja-casada(Nuera, Esposo), padre(Suegro, Esposo).
- yerno(Yerno, Suegra) :- pareja-casada(Esposa, Yerno), madre(Suegra, Esposa).
- yerno(Yerno, Suegro) :- pareja-casada(Esposa, Yerno), padre(Suegro, Esposa).
- padresPoliticos(X, Suegro, Suegra) :- suegra(Suegra, X), yerno(X, Suegro), Suegra =\= Suegro.
- padresPoliticos(X, Suegro, Suegra) :- suegra(Suegra, X), nuera(X, Suegro), Suegra =\= Suegro.
- hermanoPolitico(Esposo, Y) :- pareja-casada(Esposa, Esposo), hermanos(Esposa, Y).
- hermanoPolitico(Esposa, Y) :- pareja-casada(Esposa, Esposo), hermanos(Esposo, Y).
- concuñados(X, Y) :- pareja-casada(Esposa, Esposo), hermanos(Esposa, X), hermanos(Esposo, Y).
- % EJERCICIO 4
- % esLista(L): true si L es una lista.
- esLista([]).
- esLista([_|_]).
- % concat(L1, L2, L3): L3 es la concatenación de L1 y L2
- concat([], L, L) :- !, esLista(L).
- concat([E|L1], L2, [E|L3]) :- concat(L1, L2, L3).
- % crear-lista(E1, E2, L): Crea una lista L que contiene los elementos E1 y E2
- crear-lista(E1, E2, [E1|E2]).
- % buscar(E, L): Devuelve si existe el elemento E en la lista L
- buscar(_, []) :- fail.
- buscar(E, [H|_]) :- E =:= H.
- buscar(E, [H|T]) :- E =\= H, buscar(E, T).
- % invertir(L, R): Guarda en R la lista L invertida
- invertirLista(L, R) :- invertirLista(L, [], R).
- invertirLista([], L, L).
- invertirLista([H|T], Prev, R) :- invertirLista(T, [H|Prev], R).
- % insertar(E, L, R): R contiene la lista L con el elemento E en su cabeza
- insertar(E, L, [E|L]).
- % remover(E, L, LS): LS es la lista resultante de remover todos los elementos E en la lista L
- remover(E, [E|T], LSE) :- remover(E, T, LSE).
- remover(E, [H|T], [H|LSE]) :- E =\= H, remover(E, T, LSE).
- remover(_, L, L).
- % remover2(E, L, LS): LS es la lista resultante de remover la primer ocurrencia del elemento E en la lista L
- remover2(E, [E|T], T).
- remover2(E, [H|T], [H|LSE]) :- E =\= H, remover2(E, T, LSE).
- % cambiar(X, Y, L, LS): LS es la lista resultante de cambiar la primer instancia del elemento X por el elemento Y en la lista L
- cambiar(X, Y, [X|T], [Y|T]).
- cambiar(X, Y, [H|T], [H|LS]) :- cambiar(X, Y, T, LS).
- % cambiar(X, Y, L, LS): LS es la lista resultante de cambiar la primer instancia del elemento X por el elemento Y en la lista L
- cambiar2(X, Y, [X|T], [Y|LS]) :- cambiar2(X, Y, T, LS).
- cambiar2(X, Y, [H|T], [H|LS]) :- cambiar2(X, Y, T, LS).
- cambiar2(_, _, L, L).
- % palindromear(L, L2): L2 es el resultado de concatenar L con la inversa de L
- palindromear(L, R) :- invertirLista(L, I), concat(L, I, R).
- % rotarIzq(L, R): Mueve el primer elemento de L al final
- rotarIzq([H|T], R) :- concat(T, [H], R).
- % EJERCICIO 5
- distancia(V1, V2, D) :- arco(V1, V2, D), !.
- distancia(V1, V2, D) :-
- distancia(V1, VSig, D1),
- arco(VSig, V2, D2),
- D is D1 + D2,
- !.
- % EJERCICIO 6
- % contar(C, L, L2, N): Retorna en N la cantidad de veces que el carácter C aparece en la cabeza de la lista. L2 contiene la lista sin los caracteres C que se encuentren en su cabeza
- contar(_, [], [], 0).
- contar(C, [C|T], L, Cont2) :- contar(C, T, L, Cont), Cont2 is Cont + 1.
- contar(_, L, L, 0).
- % pertenece(L): Determina si la lista de carácteres L pertenece a la gramática G
- perteneceG(L) :-
- contar(a, L, L1, ContA),
- contar(b, L1, L2, ContB),
- contar(c, L2, [], ContC),
- ContC2 is ContA + ContB,
- ContB > 0,
- ContC2 =:= ContC.
- % EJERCICIO 7
- % rotarDerecha(L, N, R): R es el resultado de rotar N veces a la derecha la lista L
- rotarDerecha(L, 1, R) :- rotarIzq(R, L).
- rotarDerecha(L, N, R) :- N1 is N - 1, rotarIzq(R2, L), rotarDerecha(R2, N1, R).
- % rotarIzquierda(L, N, R): R es el resultado de rotar N veces a la izquierda la lista L
- rotarIzquierda(L, 1, R) :- rotarIzq(L, R).
- rotarIzquierda(L, N, R) :- N1 is N - 1, rotarIzq(L, R2), rotarIzquierda(R2, N1, R).
- % EJERCICIO 8
- % prefijo(P, L) :- true si P es prefijo de L
- prefijo([], L).
- prefijo([X|Y], [X|Z]) :- prefijo(Y, Z).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement