En este tema, aprenderemos a construir una aplicación completa en Prolog. Este proceso incluye la definición de la lógica del programa, la manipulación de datos, la interacción con el usuario y la integración de diferentes componentes del sistema. Al final de este tema, tendrás una comprensión clara de cómo desarrollar una aplicación funcional en Prolog.

  1. Definición del Problema

Antes de comenzar a programar, es crucial definir claramente el problema que queremos resolver. Para este ejemplo, construiremos una aplicación de gestión de una biblioteca. La aplicación permitirá:

  • Añadir nuevos libros.
  • Buscar libros por título o autor.
  • Listar todos los libros disponibles.
  • Eliminar libros.

  1. Estructura del Proyecto

Organizaremos nuestro proyecto en varios archivos para mantener el código limpio y modular:

  • main.pl: Archivo principal que ejecuta la aplicación.
  • database.pl: Archivo que contiene los hechos y reglas para la base de datos de libros.
  • operations.pl: Archivo que contiene las operaciones de la biblioteca (añadir, buscar, listar, eliminar).

  1. Implementación

3.1. Base de Datos de Libros

Primero, definimos la base de datos de libros en database.pl:

% database.pl
:- dynamic book/3.

% book(Title, Author, Year).
book('The Hobbit', 'J.R.R. Tolkien', 1937).
book('1984', 'George Orwell', 1949).
book('To Kill a Mockingbird', 'Harper Lee', 1960).

3.2. Operaciones de la Biblioteca

Definimos las operaciones en operations.pl:

% operations.pl
:- consult(database).

% Añadir un nuevo libro
add_book(Title, Author, Year) :-
    assertz(book(Title, Author, Year)),
    write('Book added successfully.').

% Buscar libros por título
search_by_title(Title) :-
    book(Title, Author, Year),
    format('Title: ~w, Author: ~w, Year: ~w~n', [Title, Author, Year]),
    fail.
search_by_title(_).

% Buscar libros por autor
search_by_author(Author) :-
    book(Title, Author, Year),
    format('Title: ~w, Author: ~w, Year: ~w~n', [Title, Author, Year]),
    fail.
search_by_author(_).

% Listar todos los libros
list_books :-
    book(Title, Author, Year),
    format('Title: ~w, Author: ~w, Year: ~w~n', [Title, Author, Year]),
    fail.
list_books.

% Eliminar un libro
delete_book(Title) :-
    retract(book(Title, _, _)),
    write('Book deleted successfully.').
delete_book(_) :-
    write('Book not found.').

3.3. Archivo Principal

Finalmente, creamos el archivo principal main.pl que interactúa con el usuario:

% main.pl
:- consult(operations).

main :-
    write('Welcome to the Library Management System'), nl,
    menu.

menu :-
    write('1. Add a new book'), nl,
    write('2. Search books by title'), nl,
    write('3. Search books by author'), nl,
    write('4. List all books'), nl,
    write('5. Delete a book'), nl,
    write('6. Exit'), nl,
    write('Enter your choice: '),
    read(Choice),
    handle_choice(Choice).

handle_choice(1) :-
    write('Enter title: '), read(Title),
    write('Enter author: '), read(Author),
    write('Enter year: '), read(Year),
    add_book(Title, Author, Year),
    menu.
handle_choice(2) :-
    write('Enter title: '), read(Title),
    search_by_title(Title),
    menu.
handle_choice(3) :-
    write('Enter author: '), read(Author),
    search_by_author(Author),
    menu.
handle_choice(4) :-
    list_books,
    menu.
handle_choice(5) :-
    write('Enter title: '), read(Title),
    delete_book(Title),
    menu.
handle_choice(6) :-
    write('Goodbye!'), nl.
handle_choice(_) :-
    write('Invalid choice, please try again.'), nl,
    menu.

  1. Ejecución de la Aplicación

Para ejecutar la aplicación, carga el archivo main.pl en el intérprete de Prolog y llama al predicado main/0:

?- consult('main.pl').
?- main.

  1. Ejercicios Prácticos

Ejercicio 1: Añadir Funcionalidad de Actualización

Añade una nueva funcionalidad para actualizar la información de un libro existente. Debes permitir al usuario modificar el título, autor o año de un libro.

Ejercicio 2: Mejorar la Búsqueda

Mejora la funcionalidad de búsqueda para que sea insensible a mayúsculas y minúsculas.

Ejercicio 3: Persistencia de Datos

Modifica la aplicación para que los datos de los libros se guarden en un archivo y se carguen al iniciar la aplicación.

  1. Conclusión

En este tema, hemos construido una aplicación básica de gestión de una biblioteca en Prolog. Hemos cubierto la definición del problema, la estructura del proyecto y la implementación de las funcionalidades principales. Con los ejercicios prácticos, puedes seguir mejorando y ampliando la aplicación. ¡Felicidades por llegar hasta aquí y sigue practicando para dominar Prolog!

© Copyright 2024. Todos los derechos reservados