Introduccion Visual Prolog

12
 INTRODUCCION VISUAL PROLOG ING. CARLOS ACEVEDO INGENIERIA DEL CONOCIMIENTO UNIVERSIDAD COOPERATIVA DE COLOMBIA PROLOG: Es un lenguaje de programación lógica, es un motor, desarrolla y ejecuta consultas en PREDICADOS, el lenguaje se convierte en instrucción y es ejecutado por el mismo, basado en predicados y algebra booleana, los archivos son planos, extensión .pro. Las variables en prolog siempre empiezan en mayúscula. Bloques de instrucciones: 1. domains: permite realizar la declaración de tipos de variables. 2. Predicates: Relación que existe entre objetos los cuales representan una realidad o un escenario 3. clauses: realiza la declaración de reglas y base del conocimiento. 4. goal: realiza las consultas, para determinar las respuestas a las preguntas de la clase. Assert : Añade un nuevo hecho o cláusula a la base de datos. Retract : permite eliminar una cláusula de la base de datos. DESCRIPCION EJERCICIO CODIGO IMAGEN PROLOG 1. programa que imprime la suma de dos números. goal X = 5, Y = 10, Z=X +Y, nl, write("El resultado es: ", Z), nl. 2. programa que suma dos números 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 números 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-  

description

Introduccion a Visual Prolog.

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