Vous êtes sur la page 1sur 1

- Que hace deductiva el prog prolog

Las relgas foman el motor de inferencia(Deduccin de una cosa a partir de otra) y asi trabaja mas rpido
en el programa
El Corte "!"
Podemos definir el Corte como un predicado que siempre se cumple, es decir, que genera un resultado
verdadero en la primera ejecucin, y falla en el proceso de backtracking, impidiendo dicho retroceso. Su
aplicacin principal es generar cdigo ms eficiente por el efecto que causa en la reduccin o poda del
rbol de bsqueda generado durante el procedimiento de resolucin.
Se trata de un predicado que siempre falla, por tanto, implica la realizacin del proceso de retroceso para
que se generen nuevas soluciones. Con fail podemos forzar a que no pare y siga construyendo el rbol de
bsqueda hasta que no queden ms soluciones que mostrar
predicates
nondeterm padre(symbol,symbol)
nondeterm madre(symbol,symbol)
nondeterm casado(symbol,symbol)
nondeterm abuevic(symbol,symbol)
nondeterm nieto(symbol,symbol)
nondeterm hija(symbol,symbol)
nondeterm linda(symbol)
%nondeterm primoYtio(symbol,symbol)
nondeterm hermana(symbol,symbol)
clauses
madre(mirian,ricardo).
madre(rita,victor).
madre(rita,veronica).
padre(marcelo,raul).
padre(marcelo,rita).
padre(juan,marcelo).
padre(juan,maria).
padre(raul,sergio).
padre(sergio,ricardo).
linda(mirian).
linda(rita).

Area(24,peru).
Area(18,chile).
rea(14,Bolivia).

Imprimir:-repite, write(Fidel), write(Desea continuar S/N=),readchar(A),A=N,!.

/*
Primero busca una solucin y si lo encuentra el corte le dice qudate con esta solucin
*/
Densidad (D,P):- poblacin(X,P), Area(Y,P),D=X/(Y*y)
/*
Esta es una segunda solucin porque acepta cualquier pas entonces como ya encontr en la primera
regla la solucin se quedo con la anterior eso hace la tijera. En caso que en la anterior regla no encuentre
la solucin es decir la regla de falso entonces se evala la siguiente regla para buscar una solucin
*/
Densidad(D,_):- write(NO TENGO INFORMACION),
D=D.
Ejemplo 2
Ingresar un entero por teclado y evaluar con un mensaje si es par o impar
Domains
i=integer
Predicates
IfMio (i, symbol)
Clauses
IfMio(X,M):-X mod 2 = 0, M=PAR,!.
ifMio(_,M):-M=IMPAR,!.
goal
write(ingrese un numero entero: ),
readint(N),
ifmio(N,M),
readln(_).

Repite
Repite:-repite
Ejemplo 4
Del ltimo ejemplo validar respuestas para que acepte minsculas s/n
predicates
Imprimir
Repite
Convertir(char,char)
clauses
Imprimir:- repite, write(Fidel ), write(Desea continuar S/N=),
readchar(B),convertir (B,A),A=N,!.
Convertir (X,Y):-X=n, Y= N.
Convertir (X,Y):-X=s, Y= S.
/*OTRA FORMA NO NECESITAS TIJERA PORQUE TODAS ESTAN RESTRINGIDA POR UNA
CONDICION QUE LAS HACE QUE SE DE SOLAMENTE UNA UNICA SOLUCION
Convertir (s,S).
Convertir (n,N).
Convertir (S,S).
Convertir (N,N).
*/
Repite.
repite:-repite
Ejemplo 5
Hacer un programa que haya el cuadrado de un numero. El programa pedir si desea continuar s/n si
ingreso s o S continuara si ingresa n o N saldr en caso de ingresar otro carcter sacara un mensaje
que solo debe ingresar s/n y otra vez el mensaje si desea continuar s/n.
TRACE
domains

abuevic(A,X):-padre(A,H),madre(H,X),!.

C=char
abuevic(A,X):-padre(A,H),padre(H,X).
nieto(A,X):-abuevic(X,A).
hermana(X,Y):-madre(B,X),madre(B,Y),X<>Y.
hija(B,X):-hermana(X,Y),madre(B,X),madre(B,Y).
casado(A,B):-padre(A,H),madre(B,H),linda(B),!.
goal
%abuevic(A,victor).
%nieto(G,raul).
%hermana(Hermana,victor).
%hermana(Hermana,veronica).
%hija(B,veronica).
casado(Casado,Linda).
UNIVERSIDAD TECNOLOGICA DEL PERU
Programacin Lgica
Practica dirigida No 1
TIJERA ( CORTE)
Ejemplo 1
Determinar los hechos y reglas para calcular la densidad de un pas y defina el corte o tijera adecuado para
este problema. Considere las siguientes proposiciones:
El Per tiene un rea territorial de 24 millones de km cuadrados y una poblacin de 30 millones de
habitantes
Chile tiene un rea territorial de 18 millones de km cuadrados y una poblacin de 24 millones de
habitantes.
Bolivia tiene un rea territorial de 14 millones de km cuadrados y una poblacin de 20 millones de
habitantes
Considere el clculo de la densidad poblacional como: D = Poblacin/ (rea)2.
Solucin:
predicates
Poblacin(integer, symbol)
Area(integer,symbol)
Densidad(real,symbol)
clauses
/*hechos*/
Poblacin(30,peru).
Poblacin(24,chile).
poblacin(20,Bolivia).

BUCLE (REPITEFAIL)
Ejemplo 1
Imprimir en forma infinita una cadena
predicates
Imprimir
Repite
clauses
Imprimir:-repite, write(Fidel), fail.
Repite.
Repite:-repite

predicates
Cuadrado
Proceso
Repite
Ejecuta(c)
goal
Proceso,
Cuadrado,
Readln(_).

Ejemplo 2
clauses
Se tiene un conjunto de hechos de nombres de personas. Hacer una regla que imprima todos los nombres
en pantalla.
domains
s=string
predicates
Persona(s)
Imprimir
clauses
% HECHOS
Persona(Silvia).
Persona(Gerson.)
Persona(Janet).
Persona(Luis).
% REGLAS
Imprimir:-persona(N), write(Nombre=,N), fail.
Imprimir.
Ejemplo 3
Hacer una regla que me imprima hasta que le diga con un ingreso por teclado de un carcter N mientras
sea S seguir imprimiendo.
predicates
Imprimir
Repite
clauses

Cuadrado:-repite,
Write(\nDesea continuar s/n =),
Readchar (c),
Ejecutar (c),
Fail.
Proceso:- clearwindow,
Write(EL CUADRADO DE UN NUMERO),nl,
Write(Ingrese X=),
Readint(X),
Y=X*X,
Write(Y=Y),
Readln(_).
Ejecuta(s).-proceso,l.
Ejecuta(S).-proceso,l.
Ejecuta(n).-exit.
Ejecuta(N).-exit.
Ejecuta(_).-clearwindow,
Write(\nIngrese solo s/n).
Repite.
Repite:-repite.

Vous aimerez peut-être aussi