Tutorial Prolog
Tutorial Prolog
Germn Vidal
IDR Prctica 2
Curso 2007/08
fib(0,1). fib(1,1). No existe la asignacin destructiva! fib(N,X) ::N>1, M1 = N-1, M2 = N-2, NNfib(M1,X1), fib(M2,X2), X = X1+X2.
El resultado es un argumento ms
Germn Vidal
IDR Prctica 2
Curso 2007/08
producto(0,X,0). producto(X,Y,W+Y) :- X>0, producto(X-1,Y,W). :producto(Xdesanidar operaciones producto(0,X,0). producto(X,Y,Z) :- X>0, producto(X-1,Y,W), Z = W+Y. :producto(Xdesanidar operaciones producto(0,X,0). producto(X,Y,Z) :- X>0, X=X-1, producto(X,Y,W), Z=W+Y. :X=Xasignacin destructiva prohibida producto(0,X,0). producto(X,Y,Z) :- X>0, N=X-1, producto(N,Y,W), Z=W+Y. :N=X-
Germn Vidal
IDR Prctica 2
Curso 2007/08
Germn Vidal
IDR Prctica 2
Curso 2007/08
predicates empleado(nombre,numero,string) fib(numero,numero) producto(integer,integer,integer) clauses empleado(juan, 22, e1). goal fib(3,X), producto(X,2,Y).
Germn Vidal
IDR Prctica 2
Curso 2007/08
Otras secciones
database: database: declaracin de predicados modificables (en lugar de usar la seccin predicates) predicates)
Su implementacin en clauses
Germn Vidal
IDR Prctica 2
Curso 2007/08
Paso de parmetros
Basado en unificacin, un mecanismo bidireccional de paso de parmetros Ejemplos:
fib(N,X) :- :?- fib(3,Y). fib(N,X) :- :?- fib(3,6). empleado(juan,22,e1). ?- empleado(N,E,C).
Germn Vidal IDR Prctica 2 Curso 2007/08
Backtracking
Debido a que algunos procedimientos tienen varias soluciones, la ejecucin de un programa Prolog genera un rbol de bsqueda El rbol de bsqueda se explora mediante el mecanismo de backtracking Ejemplo: nat(N)
nat(0). nat(X) :- nat(Y), X = Y+1. :?- nat(N). N=0 nat(M) N=1 N=2 nat(P) nat(Q)
Curso 2007/08
Germn Vidal
IDR Prctica 2
Germn Vidal
IDR Prctica 2
Curso 2007/08
Germn Vidal
IDR Prctica 2
Curso 2007/08
Ejercicio
Escribid un programa que muestre por pantalla el nombre del empleado de menor edad (usando la base de datos del primer ejemplo) Pista: Pista: hay que usar un bucle No se puede usar nada que no se haya visto hoy
Germn Vidal
IDR Prctica 2
Curso 2007/08