Definir Una Regla Unaria

5
1. Definir una regla unaria, cuyo sujeto sea un número 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=M- 1,div_primo(N,M1,C1),C=C1+1. div_primo(N,M,C):-N>0,M>0,Z=N mod M,Z<>0,M1=M- 1,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 números 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). 1

Transcript of Definir Una Regla Unaria

Page 1: Definir Una Regla Unaria

1. Definir una regla unaria, cuyo sujeto sea un número 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=M- 1,div_primo(N,M1,C1),C=C1+1. div_primo(N,M,C):-N>0,M>0,Z=N mod M,Z<>0,M1=M-1,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 números 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 números A y B q sea verdadera cuando se muestran por pantalla todos los números que se encuentran entre A y B, siendo A menor que B.

domains numero=integer predicates nondeterm esta_entre(numero,numero)

1

Page 2: Definir Una Regla Unaria

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 número 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.

domainsnumero=integerpredicates

nondeterm divisor(numero,numero).nondeterm divisores(numero).

clausesdivisor(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).

2

Page 3: Definir Una Regla Unaria

6. Escribir la definición de una regla que relacione un número natural con la suma de sus divisores.

domains numero=integer

predicatesnondeterm 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=D-

1,suma_divisor(N,D1,S1),S=S1+D.suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z>0,D1=D-

1,suma_divisor(N,D1,S).

sumadiv(N,S):-suma_divisor(N,N,S).goal

sumadiv(10,X).

7. Definir una regla que vincule un número N con los números perfectos menores o iguales que N. Un número es perfecto si la suma de sus divisores, excepto él mismo, es igual al propio número.

Predicatesnondeterm sumadiv(integer,integer)nondeterm suma_divisor(integer,integer,integer)nondeterm perfecto(integer)nondeterm perfectos(integer)

clausessuma_divisor(N,0,0):-N>0.suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z=0,D1=D-

1,suma_divisor(N,D1,S1),S=S1+D.suma_divisor(N,D,S):-N>0,D<>0,Z=N mod D,Z>0,D1=D-

1,suma_divisor(N,D1,S).sumadiv(N,S):-suma_divisor(N,N,S).

perfectos(X):-X>0,perfecto(X),write(X),nl,X1=X-1,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 números naturales sean amigos. Dos números son amigos si la suma de los divisores del primero, excepto el mismo, es igual al segundo y viceversa.

3

Page 4: Definir Una Regla Unaria

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 número: "), readint(N),sumadiv(N).

sumadiv(284,220).

4