2. 2Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 1
Determinar el menor numero
(X) de una lista formada por N
términos
(3, 1, 5) 1
3. 3Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Determinar si un numero (X) es par
%
par(X) :- 0 is X mod 2.
4. 4Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Determinar si un numero (X) es impar
%
impar(X) :- 1 is X mod 2.
5. 5Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Determinar si la Lista (L) es palindroma
%
palindromo(L) :- reverse(L, L).
7. 7Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Determinar la longitud de una lista
%
longitud([ ], 0).
longitud([ _ | Cola], N) :-
longitud(Cola, T), N is T+1.
8. 8Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Determinar si la Lista2 (L2) es la inversa de la Lista1 (L1).
% Ambas listas deben ser del mismo tamaño
%
esInversa(L1,L2) :- esInversa_aux(L1,[],L2).
esInversa_aux([],L,L).
esInversa_aux([X|L],Acum,L2) :-
esInversa_aux(L,[X|Acum],L2).
9. 9Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 2
% Invertir una lista de tamaño N
(1, 3, 5) (5, 3, 1)
10. 10Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
Calcular el valor del elemento N de la Serie de Fibonacci
(0,1,1,2,3,5,8,13,21,...)
%
fib(0, 1) :- !.
fib(1, 1) :- !.
fib(N, R) :- N1 is N - 1, N2 is N - 2,
fib(N1, R1), fib(N2, R2), R is R1 + R2.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 |
11. 11Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
Determinar el Maximo Comun Divisor (MCD) de
dos numeros X, Z enteros
%
esMCD(X,X,X).
esMCD(X,Y,Z) :- X < Y, Y1 is Y-X, esMCD(X,Y1,Z).
esMCD(X,Y,Z) :- X > Y, esMCD(Y,X,Z).
12. 12Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 3
Determinar el MCM (Mínimo Comun
Multiplo) de 2 números enteros
(50, 20) 100
13. 13Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Ordenar una lista (2, 3, 1) --> (1, 2, 3)
ordenar([],[]).
ordenar([H|T], Q) :-
separar(H, T, Menor, Mayor),
ordenar(Menor, M1), ordenar(Mayor,
M2), append(M1,[H|M2],Q).
14. 14Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% separar(Pivote, Lista, Menores, Mayores)
separar(_,[],[],[]).
separar(X,[A|B],[A|Menor],Mayor) :- A =< X,
separar(X, B, Menor, Mayor).
separar(X,[A|B],Menor,[A|Mayor]) :- A > X,
separar(X, B, Menor, Mayor).
15. 15Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% producto vectorial homogeneo (vectores del
mismo tamaño)
prodVect([],[],0).
prodVect([X|Xs],[Y|Ys],N):-
prodVect(Xs,Ys,N1), N is N1+X*Y.
16. 16Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Sumar elementos de una lista
%
sumaLista([],0).
sumaLista([X|L],Y) :-
sumaLista(L,Y1), Y is X+Y1.
17. 17Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
ARITMÉTICA EN PROLOG
% Multiplicar los elementos de una lista
%
esMulti([], 1).
esMulti([X|Xs], S):- esMulti(Xs, S2),
S is S2 * X.
18. 18Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 4
% Calcular el producto de un
numero entero por una lista
(2, 3, 5) & 5 (10, 15, 25)
19. 19Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 5
% Calcular el promedio de una
lista
(24, 30, 6) 20
20. 20Escuela Ingeniería SistemasSISTEMAS EXPERTOS
PROLOG Prof.: LUIS ENRIQUE RIVAS (2020-1)
EJERCICIO 6-7
Calcular los N primeros números primos
(6) 1,2,3,5,7,11
decir, si un numero es primo
(15) NO
Notas del editor
Por ser este un curso para estudiantes de Ingeniería Industrial se hará mayor énfasis en técnicas para la resolución de problemas, así como en la estructura general y funcionamiento de los programas que en un lenguaje especifico de programación, a fin de no “traumatizar” al alumno sino mas bien animarlo a continuar aprendiendo al respecto por su cuenta