Está en la página 1de 7

Programacin Lgica

Objetivos 1. Crear un proyecto. 2. Identificar las secciones de un programa en PROLOG Creacin de Proyectos. 1. Crear su carpeta de trabajo en UTP/LAB/ 2. Ingresar al PROLOG e ir a la opcin Project/New Project

3. Registrar su proyecto con el nombre Lab01 en la carpeta ../labs/

4. Modifique la configuracin del UI Strategy, como sigue:

Ing. Sal Prez Vega

UTP - FIIS

Pgina 1 de 7

Programacin Lgica

Presione el botn Create para crear el nuevo proyecto. Luego de este paso obtendr la siguiente ventana, desde donde puede seleccionar, editar y crear los programas para su proyecto.

5. Edite el programa LAB04.PRO Ud debe de obtener el siguiente programa, compare y verifique que los programas tienen la misma especificacin:

Ing. Sal Prez Vega

UTP - FIIS

Pgina 2 de 7

Programacin Lgica
/***************************** Copyright (c) UTP Project: LAB04 FileName: LAB04.PRO Purpose: No description Written by: Visual Prolog Comments: *******************************/ include "lab04.inc" predicates lab04() clauses lab04():-!. goal lab01().

ESTRUCTURAS
La mayora de las aplicaciones se necesita emplear datos mas complejos, que los que se han usado hasta el momento, la habilidad de construir estructuras de datos es fundamental, el Prolog permite el manejo de estas estructuras: Functores Listas Cadenas FUNCTORES Una relacin y sus objetos se escriben normalmente como: Relacin (objeto,objeto) o predicado(argumento, argumento) Con la relacin precediendo a los objetos encerrados entre parntesis. El prolog permite crear objetos que tengan otros objetos que son llamados objetos compuestos, lo que le permite aadir mas detalles a las clausulas. domains titulo, autor = symbol paginas = integer publicacion = libro(titulo, paginas) predicates escrito_por(autor,publicacion) novela_extensa(titulo) clauses escrito_por(fleming,libro("Dr. No",210)). escrito_por(melville,libro("Moby Dick",600)). escrito_por(banbaren,libro("El Delfin",90)). novela_extensa(Titulo):escrito_por(_,libro(Titulo,Nro_paginas)), Nro_paginas>300. goal novela_extensa("Moby Dick").

Ing. Sal Prez Vega

UTP - FIIS

Pgina 3 de 7

Programacin Lgica

Programacin con Listas


Unas lista es otra forma de un objeto compuesto, es una importante estructura de datos, una coleccin de elementos separados oir comas y encerrados entre corchetes. Ejemplo: Lista de enteros . [1,2,3,4,5,6,7] Lista de simbolos[mamfero, reptil, aves] Lista de cadenas [mamifero,reptil,aves] Lista vacia .. [] Declaracion de dominios Las declaraciones de dominios para las listas no son muy diferentes de las declaraciones de otros tipos de objetos. En su forma general es como sigue: Domains Lista_cosas = cosas* Cosas = symbol El * indica que hay cero o mas elementos en la lista, la primera lnea de la declaracin significa que cada objeto de la lista lista_cosas pertenece al tipo cosas. Ejemplo: lista_numeros = integer* Manipulacin de Listas Prolog procesa las listas dividiendo en dos partes Cabeza y Cola. La cabeza de una lista es el primer elemento de la izquierda, la cola es el resto de los elementos. Ejemplo: lista[1,2,3,4,5] Cabeza = 1 Cola = [2,3,4,5] Miembro de una lista Miembro(X,L), donde X es un objeto y L es la lista. Si se tiene el objetivo miembro(X,L) ser verdadero si X esta en la lista. miembro(b,[a,b,c,d]) es verdadero miembro(b,[a,c,d]) es falso El programa para validar el objetivo puede basarse en: X es la cabeza de L X es miembro de la cola de L. Lo cual se puede escribir: miembro(X,[Cabeza|Cola]). %primer hecho miembro(X,[Cabeza|Cola]) :- miembro(X,Cola).

Ing. Sal Prez Vega

UTP - FIIS

Pgina 4 de 7

Programacin Lgica
Crear un programa en Prolog - LISTAS 1. Recuerde que la lgica de programacin en Prolog es declarativa, a diferencia de lenguajes de programacin como el Java o C++ que son procedurales. Por lo que las instrucciones no especifican cmo resolver el problema?, sino cul es el problema a resolver 2. Reemplace el programa generado por defecto por el PROLOG por el siguiente cdigo: domains listaletras = symbol* predicates letras_griegas(listaletras) clauses letras_griegas([alfa,beta,gamma,delta,epsilon,theta,eta,zeta]). goal letras_griegas([Cabeza|Cola]). 3. Presiones Ctl-G y verifique que es lo que se obtiene. 4. Modifique el programa ingresando dos nuevas listas y almacenarlo en Nueva_Lista 5. Modifique el programa para tener una lista de nmeros enteros, luego ingresar dos listas de nmeros para almacenarlo en Nueva_Lista.

Ejercicio 4.2 domains letras = symbol* numeros = integer* predicates ciudad(letras) - nondeterm(i),nondeterm(o) cantidad(numeros, letras, real) clauses ciudad([lima, arequipa,ica,tacna]). ciudad([lisboa, new_york, barcelona,helsinski, miami]). cantidad([1,4,6,2],[libro,cuaderno,lapiz,regla],0.45). goal write(Ciudades de la LISTA),nl,ciudad(A). % write(Elementos de la LISTA),nl,cantidad(A,B,C).

Ejercicio 4.3 evaluar si un objeto es miembro de la lista domains nombrelista = nombre* nombre = symbol predicates miembro(nombre,nombrelista) - nondeterm(o,i), nondeterm(i,i)
Ing. Sal Prez Vega UTP - FIIS Pgina 5 de 7

Programacin Lgica
clauses miembro(Nombre,[Nombre|_]). miembro(Nombre,[_|Cola]):- miembro(Nombre,Cola). goal miembro(pedro,[ana,bernardo,karla,tatiana,elvis]). Ejercicio 4.4 Insertar un elemento a la lista

domains lista = symbol* predicates inserta(lista,lista,lista) clauses inserta([],B_Lista,B_Lista). inserta([Cabeza|Cola_Antigua], B_Lista, [Cabeza|Cola_Nueva]):inserta(Cola_Antigua, B_Lista, Cola_Nueva). goal inserta([a,b],[c,d],Nueva_Lista).
OPERACIONES CON LISTAS

pertenece(X,[X|_]). pertenece(X,[_|Cola]):- pertenece(X,Cola). concatena([],L,L). concatena([X|L1],L2,[X|L3]):- concatena(L1,L2,L3). aadir(X,L,[X|L]). elimina(X,[X|Cola],Cola). elimina(X,[_|Cola],[X|L]):- elimina(X,Cola,L). insertar(X,L,[X|L]). insertar(X,[Y|L1],[Y|L2]):- insertar(X,L1,L2). sublista(S,L):- concatena(L1,L2,L),concatena(S,L3,L2). permutar([],[]). permutar([X|L],P) :- permutar(L,P1),insertar(X,P1,P).

Ejercicios Propuestos:
Dado una lista de nombres de alumnos - Crear un programa para verificar si un alumno pertenece o no a la lista.

Ing. Sal Prez Vega

UTP - FIIS

Pgina 6 de 7

Programacin Lgica
Dado una lista de nombres de alumnos - Crear un programa para insertar un nombre y mostrar la nueva lista. Dado una lista de nombres de alumnos - Crear un programa para eliminar un nombre y mostrar la nueva lista. Dado una lista de nombres de alumnos - Crear un programa para cambiar de posicin al primer elemento al ltimo y el ltimo al primero. Dado una lista de nmeros crear un programa para contar el nmero de elementos de la lista. Dado una lista de nmeros crear un programa para encontrar el mayor nmero de la lista. Dado una lista de nmeros crear un programa para encontrar el menor nmero de la lista. Dado una lista de nmeros crear un programa para ordenar ascendentemente la lista. Dado una lista de nmeros crear un programa para ordenar descendentemente la lista.

LISTAS DE LISTAS
Se puede hacer estructuras tan complejas como se quiera, es decir se pueden poner listas dentro de listas. Ejemplo: Animales([mamferos,reptiles,peces]) Pueden darse con mayor profundidad, donde cada elemento podra a su vez ser una lista. Animales([vaca,bufalo,mono],[serpiente,cocodrilo,iguana],[atun,sardina,bonito]) Tambin cada elemento podra tener un functor y una lista como el objeto del functor. Animales(mamfero([vaca,bufalo,mono]), Reptiles([serpiente,cocodrilo,iguana]), Peces([atun,sardina,bonito])).

Ing. Sal Prez Vega

UTP - FIIS

Pgina 7 de 7

También podría gustarte