Inteligencia Artificial Ejercicios Prácticos Universidad de Boyacá PROLOG
Predicado que eleve un número a un exponente exp1(X,Y,Z):-integer(Y),Y>=0,exp(X,Y,Z). exp1(0,0,'Error'):-!. exp1(X,Y,'Error'):-!. exp(X,0,1):-!. exp(X,Y,Z):-Y2 is Y-1,exp(X,Y2,Z2),Z is X*Z2. ?- exp1(3,5,X). X = 243 ; X = 'Error'
Par Impar y suma par(X) :- 0 is X mod 2. impar(X) :- 1 is X mod 2. suma(X,Y,Z):- Z is X + Y. | ?- par(6). yes | ?- impar(3). yes | ?- suma(6,3,X). X = 9
Suma Lógicas | ?- sumaLogica(3,4,7). yes | ?- sumaLogica(X,4,7).  X = 3 ; | ?- sumaLogica(3,X,7). X = 4 | ?- sumaLogica(3,4,X). X = 7 ; sumaLogica(X,Y,Z):-  integer(X), integer(Y),Z is X + Y. sumaLogica(X,Y,Z):- integer(Y), integer(Z),X is Z - Y. sumaLogica(X,Y,Z):- integer(X), integer(Z),Y is Z - X.
El máximo de dos números maximo(X,Y,X):-X > Y. maximo(X,Y,Y):-X < Y. | ?- maximo(4,3,T). T = 4 ; En forma directa también prolog puede realizar esta operación así: | ?- X is max(5,10). X = 10
El máximo de dos números  (Uso de If) numero:- write('digite un numero'), read(X), write('digite un numero'), read(Y), X > Y -> write('el numero MAYOR ='),write(X),nl;  write('el numero MAYOR'), write(Y),nl.
El mcd  de dos números enteros es el mayor numero que los divide a los dos sin dejar residuo. máximo común divisor
mcd(X,X,X). mcd(X,Y,Z):- X < Y, Y1 is Y-X, mcd(X,Y1,Z). mcd(X,Y,Z):- X > Y, mcd(Y,X,Z). máximo común divisor | ?- mcd(8,4,R). R = 4 ; no | ?- mcd(8,3,R). R = 1 ; no | ?- mcd(7,20,R). R = 1 ; no | ?- mcd(7,49,R). R = 7 ; no
#include &quot;stdio.h&quot; #include &quot;conio.h&quot; void main(){ int a,b; int fact(int); printf(&quot;digite el numero al cual desea sacar !&quot;); scanf(&quot;%d&quot;,&a); b =fact(a); printf(&quot;FACTORIAL DE %d != %d&quot;,a,b); } Factorial de un número entero int fact(int x){ int y; if (x==0)   return(1); else y=x*fact(x-1); return(y); }
Factorial de un número entero fact(X,Y):-integer(X),X>=0,fact2(X,Y). fact(X,'Error'):-!. fact2(0,1):-!. fact2(N,R):-M is N-1,fact2(M,R2),R is N*R2. ?- fact(5,Y). Y = 120 ;
factorial(1,1). factorial(X,Y):- X > 1, X1 is X-1, factorial(X1,Y1), Y is X * Y1.  | ?- factorial(5,T). T = 120 ; Factorial de un número entero
0,1,1,2,3,5,8,13,21….. #include &quot;stdio.h&quot; #include &quot;conio.h&quot; void main(){ int c,n; int FIBONA(int); printf(&quot;digit HASTA QUE TERMINO HALLAR FIBONACI&quot;); scanf(&quot;%d&quot;,&n); c =FIBONA(n); printf(&quot;LA SERIE FIBONACI DE %d ES %d&quot;,n,c); } Serie de Fibonacci int FIBONA(int n) { int x,y; if (n<=1) return n; else{ x=FIBONA(n-2); y=FIBONA(n-1); return(x+y); }  }
0,1,1,2,3,5,8,13,21….. fibonacci(0,0). fibonacci(1,1). fibonacci(N,X):- N > 1, N1 is N-1, fibonacci(N1,X1), N2 is N-2, fibonacci(N2,X2), X is X1+X2.  Serie de Fibonacci | ?- fibonacci(6,R). R = 8 ;
Menú: %% entradas entrada(rabanos, 20). entrada(pate, 90). entrada(ensalada, 40). entrada(sopa,35). %% primer plato (de carne) carne(ternera, 130). carne(pollo, 100). carne(conejo, 120). %% primer plato (de pescado) pescado(trucha, 90). pescado(salmon, 150). pescado(merluza, 95). %% postre postre(flan, 80). postre(cuajada, 60). postre(fruta, 50).
Menú: %% entradas entrada(rabanos, 20). entrada(pate, 90). entrada(ensalada, 40). entrada(sopa,35). %% primer plato (de carne) carne(ternera, 130). carne(pollo, 100). carne(conejo, 120). %% primer plato (de pescado) pescado(trucha, 90). pescado(salmon, 150). pescado(merluza, 95). %% postre postre(flan, 80). postre(cuajada, 60). postre(fruta, 50). calmenu(E,P,T,C) :- entrada(E,CE), carne(P,CP), postre(T,CT), C is CE+CP+CT.
Cuestiones sobre menú •  ¿Qué menús tiene menos de 150 calorías?. •  ¿Y exactamente 200?. •  ¿Qué menús tienen menos de 210 siendo el postre el que aporta más de 70? •  ¿Cuantas calorías tienen los menús que llevan ternera? •  ¿Cuantas calorías tiene los menús que llevan carne? ?-calmenu(E,P,T,C),C < 150. ?-calmenu(E,P,T,200). ?-calmenu(E,P,T,C),C<210,postre(T,CP),CP>70. ?-calmenu(E,ternera,T,C). ?-calmenu(E,P,T,C),carne(P,CP).
Referencias Recopilado por: Leonardo Bernal Zamora

Practicas prolog2011

  • 1.
    Inteligencia Artificial EjerciciosPrácticos Universidad de Boyacá PROLOG
  • 2.
    Predicado que eleveun número a un exponente exp1(X,Y,Z):-integer(Y),Y>=0,exp(X,Y,Z). exp1(0,0,'Error'):-!. exp1(X,Y,'Error'):-!. exp(X,0,1):-!. exp(X,Y,Z):-Y2 is Y-1,exp(X,Y2,Z2),Z is X*Z2. ?- exp1(3,5,X). X = 243 ; X = 'Error'
  • 3.
    Par Impar ysuma par(X) :- 0 is X mod 2. impar(X) :- 1 is X mod 2. suma(X,Y,Z):- Z is X + Y. | ?- par(6). yes | ?- impar(3). yes | ?- suma(6,3,X). X = 9
  • 4.
    Suma Lógicas |?- sumaLogica(3,4,7). yes | ?- sumaLogica(X,4,7). X = 3 ; | ?- sumaLogica(3,X,7). X = 4 | ?- sumaLogica(3,4,X). X = 7 ; sumaLogica(X,Y,Z):- integer(X), integer(Y),Z is X + Y. sumaLogica(X,Y,Z):- integer(Y), integer(Z),X is Z - Y. sumaLogica(X,Y,Z):- integer(X), integer(Z),Y is Z - X.
  • 5.
    El máximo dedos números maximo(X,Y,X):-X > Y. maximo(X,Y,Y):-X < Y. | ?- maximo(4,3,T). T = 4 ; En forma directa también prolog puede realizar esta operación así: | ?- X is max(5,10). X = 10
  • 6.
    El máximo dedos números (Uso de If) numero:- write('digite un numero'), read(X), write('digite un numero'), read(Y), X > Y -> write('el numero MAYOR ='),write(X),nl; write('el numero MAYOR'), write(Y),nl.
  • 7.
    El mcd de dos números enteros es el mayor numero que los divide a los dos sin dejar residuo. máximo común divisor
  • 8.
    mcd(X,X,X). mcd(X,Y,Z):- X< Y, Y1 is Y-X, mcd(X,Y1,Z). mcd(X,Y,Z):- X > Y, mcd(Y,X,Z). máximo común divisor | ?- mcd(8,4,R). R = 4 ; no | ?- mcd(8,3,R). R = 1 ; no | ?- mcd(7,20,R). R = 1 ; no | ?- mcd(7,49,R). R = 7 ; no
  • 9.
    #include &quot;stdio.h&quot; #include&quot;conio.h&quot; void main(){ int a,b; int fact(int); printf(&quot;digite el numero al cual desea sacar !&quot;); scanf(&quot;%d&quot;,&a); b =fact(a); printf(&quot;FACTORIAL DE %d != %d&quot;,a,b); } Factorial de un número entero int fact(int x){ int y; if (x==0) return(1); else y=x*fact(x-1); return(y); }
  • 10.
    Factorial de unnúmero entero fact(X,Y):-integer(X),X>=0,fact2(X,Y). fact(X,'Error'):-!. fact2(0,1):-!. fact2(N,R):-M is N-1,fact2(M,R2),R is N*R2. ?- fact(5,Y). Y = 120 ;
  • 11.
    factorial(1,1). factorial(X,Y):- X> 1, X1 is X-1, factorial(X1,Y1), Y is X * Y1. | ?- factorial(5,T). T = 120 ; Factorial de un número entero
  • 12.
    0,1,1,2,3,5,8,13,21….. #include &quot;stdio.h&quot;#include &quot;conio.h&quot; void main(){ int c,n; int FIBONA(int); printf(&quot;digit HASTA QUE TERMINO HALLAR FIBONACI&quot;); scanf(&quot;%d&quot;,&n); c =FIBONA(n); printf(&quot;LA SERIE FIBONACI DE %d ES %d&quot;,n,c); } Serie de Fibonacci int FIBONA(int n) { int x,y; if (n<=1) return n; else{ x=FIBONA(n-2); y=FIBONA(n-1); return(x+y); } }
  • 13.
    0,1,1,2,3,5,8,13,21….. fibonacci(0,0). fibonacci(1,1).fibonacci(N,X):- N > 1, N1 is N-1, fibonacci(N1,X1), N2 is N-2, fibonacci(N2,X2), X is X1+X2. Serie de Fibonacci | ?- fibonacci(6,R). R = 8 ;
  • 14.
    Menú: %% entradasentrada(rabanos, 20). entrada(pate, 90). entrada(ensalada, 40). entrada(sopa,35). %% primer plato (de carne) carne(ternera, 130). carne(pollo, 100). carne(conejo, 120). %% primer plato (de pescado) pescado(trucha, 90). pescado(salmon, 150). pescado(merluza, 95). %% postre postre(flan, 80). postre(cuajada, 60). postre(fruta, 50).
  • 15.
    Menú: %% entradasentrada(rabanos, 20). entrada(pate, 90). entrada(ensalada, 40). entrada(sopa,35). %% primer plato (de carne) carne(ternera, 130). carne(pollo, 100). carne(conejo, 120). %% primer plato (de pescado) pescado(trucha, 90). pescado(salmon, 150). pescado(merluza, 95). %% postre postre(flan, 80). postre(cuajada, 60). postre(fruta, 50). calmenu(E,P,T,C) :- entrada(E,CE), carne(P,CP), postre(T,CT), C is CE+CP+CT.
  • 16.
    Cuestiones sobre menú• ¿Qué menús tiene menos de 150 calorías?. • ¿Y exactamente 200?. • ¿Qué menús tienen menos de 210 siendo el postre el que aporta más de 70? • ¿Cuantas calorías tienen los menús que llevan ternera? • ¿Cuantas calorías tiene los menús que llevan carne? ?-calmenu(E,P,T,C),C < 150. ?-calmenu(E,P,T,200). ?-calmenu(E,P,T,C),C<210,postre(T,CP),CP>70. ?-calmenu(E,ternera,T,C). ?-calmenu(E,P,T,C),carne(P,CP).
  • 17.
    Referencias Recopilado por:Leonardo Bernal Zamora