Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
criba([ ], [ ]).
criba([E | Es],[E | Ps]) :- retirar(E, Es, Nueva), criba(Nueva, Ps).
retirar(P, [ ], [ ]).
retirar(P, [E | Es], [E | Nes]) :-
not (0 is E mod P), !,
retirar(P, Es, Nes).
retirar(P, [E | Es], Nes) :-
0 is E mod P, !,
retirar(P, Es, Nes).
–1–
Continuando con el tema aritmético, he aquí unos programas en PROLOG para
la formulación recursiva de los algoritmos de Euclides para encontrar el máximo común
divisor y el mínimo común múltiplo de un par de enteros.
El objetivo mcd(I, J, K) se cumple cuando el máximo común divisor de I y J es
K.
El objetivo mcm(I, J, K) se cumple cuando el mínimo común múltiplo de I y J
es K.
mcd(I, 0, I).
mcd(I, J, K) :- R is I mod J, mcd(J, R, K).
Obsérvese que, debido a la forma de calcular los restos, estos predicados no son
“reversibles”, es decir, las variables I y J deben estar instanciadas para que los
predicados funcionen.
–2–