Está en la página 1de 4

1. Definir una regla unaria, cuyo sujeto sea un nmero natural N, que es verdadera cuando N es primo.

domains numero=integer predicates nondeterm primo(numero) nondeterm div_primo(numero,numero,numero) clauses div_primo(N,0,0):-N>0. div_primo(N,M,C):-N>0,M>0,Z=N mod M,Z=0,M1=M1,div_primo(N,M1,C1),C=C1+1. div_primo(N,M,C):-N>0,M>0,Z=N mod M,Z<>0,M1=M1,div_primo(N,M1,C). primo(N):-div_primo(N,N,K),K=2,write("Es Primo"),nl. primo(N):-div_primo(N,N,K),K>2,write("No es Primo"),nl. goal primo(2). 2. Escribir una regla binaria que relacione dos nmeros enteros con su producto,en base a las siguientes definiciones. domains numero=integer predicates nondeterm producto(numero,numero) clauses producto(A,B):- B=1,P=A,write(P),nl. producto(A,B):- B>1,P=(A*(B-1)+A),write(P),nl. goal producto(3,4). 3. Escribir una regla binaria cuyos sujetos son dos nmeros A y B q sea verdadera cuando se muestran por pantalla todos los nmeros que se encuentran entre A y B, siendo A menor que B. domains numero=integer predicates nondeterm esta_entre(numero,numero) 1

clauses esta_entre(A,B):-A=B,write(A),nl. esta_entre(A,B):-A<B,M=A+1,write(A),nl,esta_entre(M,B). goal esta_entre(3,7). 4. Definir una regla unaria cuyo sujeto sea un nmero natural N, y que sea verdadera cuando se muestren por pantalla todos los divisores de N, incluidos la unidad y l mismo. domains numero=integer predicates nondeterm divisores(numero) nondeterm divisor(numero,numero) nondeterm divisor2(numero,numero) clauses divisor(N1,N2):-Y=N2 mod N1, Y=0, N1>0, N1<=N2. divisor2(N,N2):-N2=N+1,N>0. divisor2(N,N1):N2=N1+1,divisor(N1,N),write(N1),nl,divisor2(N,N2). divisor2(N,N1):-N1<=N,N2=N1+1,divisor2(N,N2). divisores(N):-divisor2(N,1). goal divisores(24). 5. Definir una regla unaria cuyo sujeto sea un numero natural N, y que sea verdadera cuando se muestran por pantalla todos los divisores de N, distintos de 1 y N. domains numero=integer predicates nondeterm divisor(numero,numero). nondeterm divisores(numero). clauses divisor(N,Y):-Y<N-1,Y1=Y+1,D=N mod Y1,D=0,write(Y1),nl,divisor(N,Y1). divisor(N,Y):-Y<N-1,Y1=Y+1,D=N mod Y1,D<>0,divisor(N,Y1). divisores(N):-divisor(N,1). goal divisores(12).

6. Escribir la definicin de una regla que relacione un nmero natural con la suma de sus divisores. domains numero=integer predicates nondeterm sumadiv(numero,numero) nondeterm suma_divisor(numero,numero,numero) clauses suma_divisor(N,0,0):-N>0. suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z=0,D1=D1,suma_divisor(N,D1,S1),S=S1+D. suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z>0,D1=D1,suma_divisor(N,D1,S). sumadiv(N,S):-suma_divisor(N,N,S). goal sumadiv(10,X). 7. Definir una regla que vincule un nmero N con los nmeros perfectos menores o iguales que N. Un nmero es perfecto si la suma de sus divisores, excepto l mismo, es igual al propio nmero. Predicates nondeterm sumadiv(integer,integer) nondeterm suma_divisor(integer,integer,integer) nondeterm perfecto(integer) nondeterm perfectos(integer) clauses suma_divisor(N,0,0):-N>0. suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z=0,D1=D1,suma_divisor(N,D1,S1),S=S1+D. suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z>0,D1=D1,suma_divisor(N,D1,S). sumadiv(N,S):-suma_divisor(N,N,S). perfectos(X):-X>0,perfecto(X),write(X),nl,X1=X1,perfectos(X1); X>0,not(perfecto(X)),X1=X-1,perfectos (X1). perfecto(X):-sumadiv(X,Y),Y1=Y-X,Y1=X. goal perfectos(100). 8. Definir una regla binaria que sea verdadera cuando dos nmeros naturales sean amigos. Dos nmeros son amigos si la suma de los divisores del primero, excepto el mismo, es igual al segundo y viceversa. 3

predicates calcula_divisores(integer, integer, integer) sumadiv(integer,integer) amigos(integer,integer) clauses calcula_divisores(_, 1, 0):-!. calcula_divisores(N, D, Suma):-Divisor=D-1, N mod Divisor=0, calcula_divisores(N, Divisor, Suma1), Suma=Suma1+Divisor,!. calcula_divisores(N, D, Suma):-Divisor=D-1, calcula_divisores(N, Divisor, Suma). %sumadiv(N,X):-calcula_divisores(N, N, Suma),X = Suma + N,write(X),nl,!. sumadiv(N,M):-calcula_divisores(N, N, Suma1),calcula_divisores(M, M, Suma2),X = Suma1 + N,Y = Suma2 + M,amigos(X,Y),!. amigos(X,Y):-X=Y. goal %write("Dame un nmero: "), readint(N),sumadiv(N). sumadiv(284,220).

También podría gustarte