Transcript

- Que hace deductiva el prog prologLas 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 elCortecomo un predicado que siempre se cumple, es decir, que genera un resultado verdadero en la primera ejecucin, y falla en el proceso debacktracking, 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. Confailpodemos forzar a que no pare y siga construyendo el rbol de bsqueda hasta que no queden ms soluciones que mostrar

predicatesnondeterm 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)

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

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

abuevic(A,X):-padre(A,H),padre(H,X).nieto(A,X):-abuevic(X,A).

hermana(X,Y):-madre(B,X),madre(B,Y),XY.

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 PERUProgramacin Lgica Practica dirigida No 1TIJERA ( CORTE)Ejemplo 1Determinar 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 habitantesChile 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 habitantesConsidere el clculo de la densidad poblacional como: D = Poblacin/ (rea)2.Solucin:predicatesPoblacin(integer, symbol)Area(integer,symbol)Densidad(real,symbol)

clauses/*hechos*/Poblacin(30,peru).Poblacin(24,chile).poblacin(20,Bolivia).Area(24,peru).Area(18,chile).rea(14,Bolivia).

/*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,!.goalwrite(ingrese un numero entero: ),readint(N),ifmio(N,M),readln(_).

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

Ejemplo 2

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.

predicatesImprimirRepite

clauses

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

RepiteRepite:-repite

Ejemplo 4

Del ltimo ejemplo validar respuestas para que acepte minsculas s/n

predicates ImprimirRepiteConvertir(char,char)

clausesImprimir:- 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 C=charpredicates Cuadrado Proceso Repite Ejecuta(c)

goal Proceso, Cuadrado, Readln(_).

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.


Top Related