You are on page 1of 7

PROGRAMACIN LGICA CON NMEROS, LISTAS Y RBOLES

Introduccin
La programacin lgica es un paradigma de los lenguajes de programacin en el cual los programas
se consideran como una serie de aserciones lgicas. De esta forma, el conocimiento se representa
mediante reglas, tratndose de sistemas declarativos.

En programacin lgica no hay tipos de datos en el sentido habitual:

dominio de valores + operaciones (ni enteros, ni reales...)

No hay bucles (ni for, ni while, ni repeat...)

No hay funciones, ni procedimientos no hay ni siquiera asignacin.

Lo nico que tenemos para trabajar es la lgica.

Orgenes de PROLOG
A partir del trabajo de Herbrand y otros en 1930, J. Alan Robinson publico el principio de
resolucin en 1965.

En los aos 70 hay un gran inters en la construccin de demostradores automticos.

En 1972 Robert Kowalski y Alan Colmenauer se plantearon utilizar la lgica como lenguaje de
programacin.

As surgi PROLOG= PROgramming in LOGic.

La programacin lgica utiliza un fragmento de la lgica de predicados y unificacin y resolucin


como mecanismo de cmputo.

Dentro de PROLOG se puede programar con Nmeros, Listas y rboles, a continuacin se detallan
algunos ejemplos de la programacin en PROLOG.

Un programa PROLOG es un conjunto de clusulas de Horn (hechos y reglas) donde:

Todas las clusulas acaban con . (punto).

El smbolo se escribe como :- que se lee como si (condicional). En los hechos no es necesario
(basta poner el tomo y . (punto)).
Nmeros
Los nmeros usados en PROLOG incluyen nmeros enteros y nmeros reales. La sintaxis de los
enteros es simple:

1313

-97

El tratamiento de nmeros reales depende de la implementacin de PROLOG.

Asumiendo una sintaxis simple:

3.14

-0.0035

Los nmeros reales no son muy utilizados en programas de Prolog. La razn de esto es que Prolog
es principalmente utilizado como un lenguaje simblico, no de computacin numrica. En la
computacin simblica, los enteros son utilizados, por ejemplo, para contar el nmero de
elementos en una lista; por lo que los nmeros reales son poco utilizados.

Los operadores de Prolog estn divididos en 2 clases: aritmticos y relacionales.

Los operadores aritmticos incluyen los smbolos para suma, resta, multiplicacin y divisin. En
PROLOG, si dos enteros son sumados, restados o multiplicados, el resultado ser un entero.
Siempre que uno de los operandos, en cualquiera de estas operaciones sea un nmero real, el
resultado siempre ser un real. El resultado de una divisin, siempre que los operandos sean
enteros o reales, ser siempre real.

ARITMTICOS:
Todas las versiones de PROLOG soportan los siguientes operadores aritmticos, listados en el
orden de prioridad de ejecucin.

+ SUMA

- RESTA

* MULTIPLICACIN

/ DIVISIN

// DIVISION ENTERA

MOD RESIDUO
^ POTENCIA

Los parntesis se pueden utilizar para dar preferencia de ejecucin en una expresin compuesta.
PROLOG utiliza la precedencia de operadores con la regla de la mano izquierda.

RELACIONALES:
PROLOG soporta los siguientes operadores relacionales:

= IGUAL QUE

> MAYOR QUE

>= MAYOR O IGUAL QUE

>= MENOR O IGUAL QUE

<> DESIGUAL QUE

=/= DIFERENTE QUE

is EVALUADOR DE EXPRESIN

seed GENERADOR DE NMEROS ALEATORIOS

Cuando dos objetos que son smbolos o cadenas de caracteres son comparados, los caracteres son
convertidos a su equivalente ASCII. El valor de cada carcter es examinado a partir del operador
relacional, de izquierda a derecha.
Listas
Una lista en PROLOG es un conjunto de nombres de objetos, o tomos, separados por comas y
encerrados en parntesis cuadrados.

Los miembros de una lista deben ser nombres vlidos de objetos, pero todos los miembros deben
ser declaraciones de un mismo dominio.

Ejemplo:

["Maria","Ana","Juan"]

[33,25.51,20,10,7]

[a,b,c,d,e,f,g]

La lista puede ser vista, como un objeto don dos partes: [Cabeza|Cola].

La cabeza de la lista, conformada por el primer elemento.

La cola, es la parte restante de la lista.

En la ltima lista del ejemplo, la cabeza es a, mientras que la cola de la lista es la lista es
[b,c,d,e,f,g,].

La notacin es la siguiente:

Lista con datos: [manzana, pera, banana]

Lista vacia: [ ]

Ejemplos:

[a|b] No es una lista.

[a,b] Si es una lista, con dos elementos

[a,b,[c,d,e]] Si es una lista, con tres elementos. 2 elementos y una lista con 3 elementos.

Se pueden utilizar cmo elementos de la lista cualquier tipo de dato de PROLOG, incluyendo listas:

Lista con dos listas dentro:

[[a,b,c],[d, e, f]]

Tambin estructuras:
[vehiculo(ale, [bici, moto, auto]),

vehiculo(ariel,[bici, auto, helicoptero])]

Tambin podemos utilizar el comando o funcin Member para poder identificar si un elemento
pertenece o no a una lista.

member(1,[5,6,7,8,1,2,3]).

yes

member(1,[a,b,c])

no

El elemento 1 pertenece a la lista de los elementos 5, 6, 7, 8, 1, 2, 3. Sin embargo 1 no


pertenece a la lista de elementos a, b, c.

Ejemplo prctico:

concatenar([],L,L).

concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).

?- concatenar([1,2],[3,4],R).

R=[1,2,3,4].
Arboles
Un rbol es un objeto que comienza con una raz y se extiende en varias ramificaciones o lneas,
cada una de las cuales puede extenderse en ramificaciones hasta terminar, finalmente en una hoja.

Los rboles representan las estructuras no-lineales y dinmicas de datos ms importantes en


computacin.

Dinmicas, puesto que la estructura rbol puede cambiar durante la ejecucin de un programa.

No lineales, puesto que a cada elemento del rbol pueden seguirle varios elementos.

En PROLOG, un rbol puede ayudarnos a entender la forma de una estructura complicada si la


escribimos en esta forma, sabiendo que el nombre sera un nodo y los componentes las ramas.

Ejemplo:

Ejemplo prctico:

libro(moby-dick, autor(herman, melville))


Bibliografa

http://www.exa.unicen.edu.ar/catedras/prog_exp/apuntes/clase3.pdf

http://www.uaeh.edu.mx/docencia/P_Presentaciones/icbi/asignatura/Cap6ARBOLES.pdf

http://fcqi.tij.uabc.mx/usuarios/ardiaz/material/manual_lab_prolog.pdf

You might also like