Introduccion Visual Prolog
description
Transcript of Introduccion Visual Prolog
-
INTRODUCCION VISUAL PROLOG ING. CARLOS ACEVEDO
INGENIERIA DEL CONOCIMIENTO UNIVERSIDAD COOPERATIVA DE COLOMBIA
PROLOG: Es un lenguaje de programacin lgica, es un motor, desarrolla y ejecuta consultas en PREDICADOS, el lenguaje se convierte en instruccin y es ejecutado por el mismo, basado en predicados y algebra booleana, los archivos son planos, extensin .pro. Las variables en prolog siempre empiezan en mayscula.
Bloques de instrucciones: 1. domains: permite realizar la declaracin de tipos de variables. 2. Predicates: Relacin que existe entre objetos los cuales representan una realidad o un escenario 3. clauses: realiza la declaracin de reglas y base del conocimiento. 4. goal: realiza las consultas, para determinar las respuestas a las preguntas de la clase. Assert: Aade un nuevo hecho o clusula a la base de datos. Retract: permite eliminar una clusula de la base de datos.
DESCRIPCION EJERCICIO
CODIGO IMAGEN PROLOG
1. programa que imprime la suma de dos nmeros.
goal X = 5, Y = 10, Z=X +Y, nl, write("El resultado es: ", Z), nl.
2. programa que suma dos nmeros enteros, digitados por el usuario.
goal write("PRIMER NUMERO ENTERO: "), Readint(X), write("SEGUNDO NUMERO ENTERO:"), Readint (Y), Z=X+Y, nl , write("La suma de ls numeros enteros es: ", Z), nl.
3. Dados 2 nmeros digitados por el usuario imprimir su suma si el primero es mayor que el segundo, de lo contrario imprimir la resta
goal write("primer numero: "),Readint(X), write("segundo numero: "),Readint(Y), X>Y, Z=X+Y, nl, write ("La suma es:" ,Z),!,nl,fail; write("Ingrese primer numero: "),Readint(X), write("Ingrese segundo numero: "),Readint(Y), Y>X, Z=X-
-
Y, nl, write ("la resta es:" ,Z),!, nl, fail.
4. Validar si un nmero digitado por el sistema es par o impar.
goal write ("ingrese el numero : "), Readint(X), M= X Mod 2, M = 0, nl, write("El numero es par "), !, fail,nl; write("El numero es impar "), nl,!,fail.
5. Determinar la suma de dos nmeros, si al menos uno de ellos es par de lo contrario haga una resta.
goal WRITE("NUMERO 1: "), Readint(X), Z= X Mod 2, WRITE("NUMERO 2: "), Readint(Y), Z1= Y Mod 2, Z=0, Z1= 0, A = X + Y, nl, WRITE("la suma es: ", A),!,fail, nl; WRITE("OTRO NUMERO 1: "),Readint(X), Z= X Mod 2, WRITE("OTRO NUMERO 2: "),Readint(Y), Z1= Y Mod 2,nl, Z=0, Z1 0, A = X + Y, nl, WRITE("la suma es: ", A),!,fail, nl; WRITE("OTRO NUMERO 1: "),Readint(X), Z= X Mod 2, WRITE("OTRO NUMERO 2: "),Readint(Y), Z1= Y Mod 2,nl, Z0, Z1=0, A = X + Y, nl, WRITE("la suma es: ", A),!,fail, nl; WRITE("OTRO NUMERO 1: "),Readint(X), Z= X Mod 2, WRITE("OTRO NUMERO 2: "),Readint(Y), Z1= Y Mod 2,nl, Z0, Z10, A = X - Y, nl, WRITE("la resta es: ", A),!,fail, nl.
6. Dados 5 nmeros digitados por el usuario: calcular el promedio 7.calcular la varianza
goal WRITE ("NUMERO 1: "), Readint(X), WRITE ("NUMERO 2: "), Readint(Y), WRITE ("NUMERO 3: "), Readint(Z), WRITE ("NUMERO 4: "), Readint(A), WRITE ("NUMERO 5: "), Readint(B), C=X+Y+Z+A+B, P= C/5, nl, WRITE("EL PROMEDIO ES: ", P),nl, V=((X-P)*(X-P) + (Y-P)*(Y-P) + (Z-P)*(Z-P) + (A-P)*(A-P) + (B-P)*(B-P))/5, nl, WRITE("LA VARIANZA ES: ", V),!,fail, nl.
-
8. ingrese tres nmeros y diga quin es el mayor
goal WRITE ("INGRESE EL VALOR DE A: "), READINT(A), WRITE ("INGRESE EL VALOR DE B: "), READINT(B), WRITE ("INGRESE EL VALOR DE C: "), READINT(C),nl, A>B, A>C, NL, WRITE("EL MAYOR ES: ", A), NL; WRITE ("INGRESE EL VALOR DE A: "), READINT(A), WRITE ("INGRESE EL VALOR DE B: "), READINT(B), WRITE ("INGRESE EL VALOR DE C: "), READINT(C),nl, B>A, B>C, NL, WRITE("EL MAYOR ES: ", B), NL; WRITE ("INGRESE EL VALOR DE A: "), READINT(A), WRITE ("INGRESE EL VALOR DE B: "), READINT(B), WRITE ("INGRESE EL VALOR DE C: "), READINT(C),nl, WRITE("EL MAYOR ES: ", C), NL.
9. Imprimir si es mayor de edad o no.
goal WRITE ("INGRESE LA EDAD: "),READINT(EDAD), EDAD>=18, WRITE("ES MAYOR DE EDAD"),nl,!; WRITE("ES MENOR DE EDAD"),!, nl.
10. Ingrese un nmero e imprima su factorial.
domains A=integer B=integer predicates nondeterm factorial(A,B) clauses factorial(0,1):-!. factorial(A,B):- A>0, A1 = A-1, factorial(A1,B1), B = A * B1. goal WRITE("INGRESE EL NUMERO: "), READINT(N),NL, factorial(N,W),NL, WRITE("EL FACTORIAL ES: ", W),NL,!,fail.
-
EJERCICIOS QUE HACEN PARTE DE UN ARBOL GENEALOGICO 11.Recorrer la base de conocimiento
Database tmp Nondeterm suma(integer) omains persona = String gen = String edad= Integer predicates NONDETERM hace_parte(persona,persona). NONDETERM gen(persona, gen). NONDETERM ed(persona, edad). clauses es_hijo("javier","pedro"). es_hijo("liliana","pedro"). es_hijo("carmenza","javier"). es_hijo("ernesto","liliana"). es_hijo("laura","liliana"). es_hijo("katia","liliana"). es_hijo("javier","helena"). es_hijo("liliana","juliana"). gen("javier","h"). gen("liliana","m"). gen("pedro","h"). gen("carmenza","m"). gen("ernesto","h"). gen("laura","m"). gen("katia","m"). gen("helena","m"). gen("juliana","m"). ed("liliana","3"). ed("helena","24"). ed("pedro","27"). ed("carmenza","43"). ed("ernesto","32"). ed("laura","47"). ed("juliana","26"). ed("katia","25"). ed("javier","57"). Suma(0). Goal es_hijo(A,B).
-
12.Determinar los hijos de Javier
goal es_hijo(Z,"javier").
13.Determinar los hijos de Liliana
goal es_hijo(Z,"liliana").
14.Determinar los hijos de Helena
goal es_hijo(A,"helena").
15.Determinar los padres de Liliana
goal es_hijo("liliana",P), gen(P,"h"), es_hijo("liliana",G), gen(G,"m"), GP.
16.Determinar los nietos de pedro
goal es_hijo(A,"pedro"), es_hijo(Nietos,A).
17.Determinar los hijos de pedro
goal es_hijo(A,"pedro").
18.Determine la abuela de Carmenza
goal es_hijo("carmenza", Papa), es_hijo(Papa, Nonita), gen(Nonita, "m").
-
19.primos de carmenza goal es_hijo("carmenza",X), es_hijo(X,Y), es_hijo(Z,Y), ZX, es_hijo(W,Z), write("Los primos de Carmenza son:", W),nl.
20.Determinar los hijos de Juliana
Goal es_hijo(A,"juliana").
21.hermanos de javier goal
es_hijo(Z, "pedro"), Z"javier".
22.edades de los hijos de pedro.
Goal es_hijo(X,"pedro"),ed(X,Edad),suma(K),R=Edad+K, retract(suma(K)),assert(suma(R)),nl, WRITE("la suma de las edades es",R),nl.
23.Buscar el hijo de cualquier persona
domains persona = String gen = String predicates NONDETERM es_hijo(persona,persona). NONDETERM gen(persona, gen). NONDETERM buscarHijos(persona). clauses es_hijo("javier","pedro"). es_hijo("liliana","pedro"). es_hijo("carmenza","javier").
-
es_hijo("ernesto","liliana"). es_hijo("laura","liliana"). es_hijo("katia","liliana"). es_hijo("javier","helena"). es_hijo("liliana","juliana"). gen("javier","h"). gen("liliana","m"). gen("pedro","h"). gen("carmenza","m"). gen("ernesto","h"). gen("laura","m"). gen("katia","m"). gen("helena","m"). gen("juliana","m"). %buscar hijos de alguinen: buscarHijos(X):- WRITE("ESCRIBA PADRE: "), readln(K), es_hijo(X,K), nl, write("Es un hijo de: ", X), nl,nl,!. buscarHijos(X):- nl, write("NO TIENE HIJOS."),nl. goal %buscar los hijos de alguien: buscarHijos(X).
24.Buscar el padre de cualquier persona
domains persona = String gen = String predicates NONDETERM es_hijo(persona,persona). NONDETERM gen(persona, gen). NONDETERM buscarPadre(persona). clauses es_hijo("javier","pedro"). es_hijo("liliana","pedro"). es_hijo("carmenza","javier"). es_hijo("ernesto","liliana"). es_hijo("laura","liliana"). es_hijo("katia","liliana"). es_hijo("javier","helena"). es_hijo("liliana","juliana").
-
gen("javier","h"). gen("liliana","m"). gen("pedro","h"). gen("carmenza","m"). gen("ernesto","h"). gen("laura","m"). gen("katia","m"). gen("helena","m"). gen("juliana","m"). %buscar padre de alguien: buscarPadre(X):- WRITE("ESCRIBA HIJO: "), readln(K), es_hijo(K,X), gen(X, "h"),nl,!, write("El padre es: ", X), nl,nl. buscarPadre(X):- nl, write("PADRE DESCONOCIDO."),nl. goal %buscar padre: buscarPadre(X).
25.Buscar nietos de cualquier persona
domains persona = String gen = String predicates NONDETERM es_hijo(persona,persona). NONDETERM gen(persona, gen). NONDETERM buscarNietos(persona). clauses es_hijo("javier","pedro"). es_hijo("liliana","pedro"). es_hijo("carmenza","javier"). es_hijo("ernesto","liliana"). es_hijo("laura","liliana"). es_hijo("katia","liliana"). es_hijo("javier","helena"). es_hijo("liliana","juliana"). gen("javier","h"). gen("liliana","m"). gen("pedro","h"). gen("carmenza","m"). gen("ernesto","h"). gen("laura","m").
-
gen("katia","m"). gen("helena","m"). gen("juliana","m"). %buscar nieto: buscarNietos(X):- write("Escriba abuelo: "), readln(K), es_hijo(X, K), es_hijo(N,X), nl, gen(N, "m"),nl, write("El nieto es: ", N),nl,nl. goal %buscar nieto: buscarNietos(N).
26.Calcular la cantidad de personas que son menores de edad.
database -tmp suma(integer) domains %Permite realizar la declaracion de tipos persona = String edad = Integer predicates %Permite realizar la declaracion de predicados NONDETERM es_hijo(persona,persona). NONDETERM per(persona, edad). clauses %Permite realizar la declaracion de reglas y bases de conocimiento %Base de conocimiento es_hijo("B","A"). es_hijo("C","A"). es_hijo("D","B"). es_hijo("E","B"). es_hijo("H","C"). es_hijo("F","E"). es_hijo("G","E"). per("A",80). per("B",60). per("C",55). per("D",40). per("E",43). per("F",20).
- per("G",17). per("H",16). suma(0). goal %Calcular la cantidad de personas que son menores de edad. per(A,X), X
-
letra("E",6). total(0). resultado():- letra(Y,X), total(R), T=R+X, retract(total(R)), assert(total(T)), fail. resultado():- total(T), write("El costo total es:: ", T), nl. goal resultado().
29.crear un predicado que sume los predicados suma e imprima el resultado
database -tmp nondeterm suma(integer) domains val= integer predicates nondeterm total(val) clauses total(4). total(3). total(2). total(10). suma(0). goal total(X), suma(K), R=X+K, assert(suma(R)),retract(suma(K)), nl, write("El resultado es: ", R), nl,nl.
30.Imprimir el costo total de los elementos
database -tmp nondeterm total(integer) nondeterm precio(let,valor) domains let = string valor = integer predicates nondeterm hace_parte(let,let) nondeterm resultado ()
-
clauses hace_parte("BOARD","PC"). hace_parte("IMPRESORA","PC"). hace_parte("RAM","BOARD"). hace_parte("HD","BOARD"). precio("PC",0). precio("BOARD",750). precio("RAM",65). precio("HD",140). precio("IMPRESORA",450). total(0). resultado():- precio(Y,X), total(R), T=R+X, retract(total(R)), assert(total(T)), fail. resultado():- total(T), write("El costo total es: ", T), nl. goal resultado().
31.Imprimir el costo total de los elemento de la Board
resultado():- hace_parte(Y,"BOARD"), precio(Y,X), total(R), T=R+X, retract(total(R)), assert(total(T)), fail. resultado():- total(T), write("El costo total es: ", T), nl. goal resultado().
32.Determine el resultado del siguiente ejercicio: Ok ucc
domains pal=Integer pa=Integer predicates nondeterm s1(pal) nondeterm s2(pa) clauses s1(R):- nl, R=1, write("OK"), nl,s2(3), fail. s2(R):- nl, R=2, write("HOla"), nl. s2(R):- nl, R=3, write("ucc"), nl,nl, fail. goal s1(R).