Вы находитесь на странице: 1из 18

Prolog reconoce el tipo de un objeto por su sintaxis (en Prolog

no es necesario declarar el tipo de un dato).

átomos
constantes
simples números
Tipos de
variables
datos
estructurados
Átomos

Se pueden construir de tres formas:

1- Cadenas de letras, dígitos y el símbolo de subrayado (_),


iniciando siempre con una letra mayúscula, ejemplos:

ana mil x25 x_25 x_25AB x_ x_y alfa_beta

2- Cadenas de caracteres especiales, ejemplos:

<---> ====> … .:. ..::=

3- Cadenas de caracteres encerrados en comillas simples,


ejemplos:

‘tomas’ ‘juan_hernandez’ ‘pais_mexico’


Números:

Pueden ser enteros o reales, ejemplos:

1 -97 3.1416 -1.2 0

Variables:

Son cadenas de letras, dígitos y el símbolo de subrayado (_) y


comienzan siempre con una letra mayúscula o un símbolo de
subrayado, ejemplos:

X Nombre_1 _x23 _55


Las estructuras son objetos que tienen varios componentes

Ejemplo: constantes, variables, estructuras


functor

fecha(20, agosto, 2012).

Todos los objetos estructurados se pueden interpretar como árboles donde el functor
es la raíz del árbol y sus componentes son las hojas del árbol.

Si un componente es a su vez una estructura, entonces será un subárbol del árbol


inicial.
REPRESENTACIÓN DE LISTAS:

La “lista” es una estructura de datos ampliamente utilizada en la


programación no numérica.

Una lista es una secuencia de cualquier número de elementos, tales como


los objetos ana, tenis, tomas, eski, esta lista se puede escribir en Prolog
como:

[ana, tenis, tomas, eski]

Esta es solamente la apariencia externa de la lista, En Prolog todos los


objetos estructurados son árboles y las listas no son la excepción.
Para representar una lista como un objeto Prolog se tienen que considerar
dos casos:

(1). Si la lista esta vacía: aquí se escribe como un átomo Prolog [ ].

(2). Si la lista no esta vacía: aquí la lista puede verse como formada por dos
cosas:
(1). El primer elemento, llamado “cabeza” de la lista.
(2). Los elementos restantes, llamados en conjunto “cola” de la lista.

Para el ejemplo anterior: [ana, tenis, tomas, eski]

La cabeza es: ana


La cola es : [tenis, tomas, eski]
En general la cabeza puede ser cualquier objeto Prolog, por ejemplo, un
árbol o una variable. La cola tiene forzosamente que ser una lista. La cabeza
y la cola se combinan en una estructura con un functor especial.

El símbolo para este functor depende de la implementación de Prolog.


Asumiendo que se trata del punto [.], entonces:

.(cabeza, cola)

Debido a que la cola es a su vez una lista, se tratará de una lista vacía o una
lista con cabeza y cola. Por lo tanto, para representar listas de cualquier
longitud no se necesita establecer ningún principio adicional. El ejemplo
anterior se representa con el termino:

.(ana, .(tenis, .(tomas, .(eski,[] ))))


La siguiente figura muestra la estructura de árbol que le corresponde:

.(ana, .(tenis, .(tomas, .(eski,[] ))))

.
Obsérvese que la lista
vacía aparece en el
ana . término anterior, esto es
porque la ultima cola es
tenis . una lista con un solo
elemento [eski]
tomas .
Esta lista tiene a su vez a
la lista vacía como cola
eski [] [eski] = .(eski, [] )
EJEMPLOS DE TIPOS DE LISTAS:
Prolog es principalmente un lenguaje simbólico donde la necesidad de
cálculos numéricos es modesta.

Los operadores predefinidos que se pueden utilizar para las


operaciones aritméticas básicas son:

+ adición
- sustracción
* multiplicación
/ división
mod módulo (residuo de la división entera)
Obsérvese o siguiente: si preguntamos

?- X = 1 + 2.

Prolog contestará:

X=1+2

…. y no 3 como era de esperarse, la razón es que la expresión 1 + 2


denota un término de prolog, donde + es el functor y 1 y 2 son sus
argumentos.
Para realizar la operación correctamente, prolog tiene un operador
predefinido, is.

La forma correcta de invocarlo es:

?- X is 1 + 2.

Prolog contestará:

X=3

…. La suma se realizó por un procedimiento especial asociado al


operador +, conocido como procedimiento interno.
Algunas implementaciones en prolog suelen usar notaciones diferentes,
por ejemplo el operador ‘/’ que puede denotar una división entera o una
división real, dependiendo de la implementación.

Aquí se asume que ‘/’ denota la división real y ‘//’ la división entera:

?- X is 3 / 2.
?- X is 3 // 2

Prolog contestará:

X = 1.5
X=1

…. Todas las variables en la expresión deben estar instanciadas a


números al momento de la ejecución de la meta.
Los paréntesis también pueden ser utilizados para indicar diferentes
asociaciones. Los operadores que +, -, *, / están definidos para realizar
su evaluación de izquierda a derecha, por ejemplo:

X is 5 – 2 – 1 se interpreta como: X is (5 – 2) – 1

Algunas otras funciones que se tienen en prolog:

-X el negativo de X.
X mod Y el residuo de la división de X entre Y. El resultado tiene el
mismo signo que X.
X^Y X a la potencia Y.
rand(X) calcula un numero aleatorio de punto flotante entre cero y X.
sqrt(X) raíz cuadrada de X.
Las operaciones aritméticas pueden ser incluidas en la comparación de
valores numéricos:

?- 277 *37 > 10000.

yes

Como otro ejemplo, suponga que se tiene la relación born que relaciona
el nombre de la persona con su año de nacimiento, se puede, entonces,
obtener el nombre de la persona nacida entre 1950y 1960 con a
siguiente pregunta:

?- born(Name,Year), Year >= 1950, Year =< 1960.

Hacer la base de conocimientos


Operadores de comparación:

X > Y X es mayor que Y.


X < Y X es menor que Y.
X >= Y X es mayor o igual que Y.
X =< Y X es menor o igual que Y.
X =:= Y los valores de X y Y son iguales
X =\= Y los valores de X y Y no son iguales.
Es importante notar la diferencia entre los operadores ‘=‘ y ‘=:=‘, por
ejemplo, en las metas X = Y y X =:= Y, la primera meta causara el
empatamiento de los objetos X y Y, y será, si X y Y coinciden,
posiblemente instanciando algunas variables en X y Y.

Por otro lado, X =:= Y causa que se realice la evaluación aritmética y no


produce ninguna instanciación de variables. La diferencia se muestra en
los siguientes ejemplos:

?- 1 + 2 =:= 2 +1.
yes

?- 1 + 2 = 2 +1.
no

?- 1 + A = B + 2.
A=2
B=1