Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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:
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").
UTP - FIIS
Pgina 3 de 7
Programacin Lgica
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.
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])).
UTP - FIIS
Pgina 7 de 7