progenitor (teresa,jorge).
Reglas
Para todos X e Y,
X es descendiente de Y SI
Y es progenitor de X.
descendiente(X,Y) :- progenitor(Y,X).
Para todos X e Y,
SI Y es progenitor de X
Entonces X es descendiente de Y.
Infijo:
xfx no es asociativo
xfy de derecha a izquierda
yfx de izquierda a derecha
Prefijo:
fx no es asociativo
fy de izquierda a derecha
Sufijo:
xf no es asociativo
yf de derecha a izquierda
1200 xfx -->, :-
1200 fx :-, ?-
1150 fx dynamic, multifile, module_transparent,
discontiguous, volatile, initialization
1100 xfy ;, |
1050 xfy ->
1000 xfy ,
954 xfy \
900 fy \+
900 fx ~
700 xfx <, =, =.., =@=, =:=, =<, ==, =\=, >, >=,
@<, @=<, @>, @>=, \=, \==, is
600 xfy :
500 yfx +, -, /\, \/, xor
500 fx +, -, ?, \
400 yfx *, /, //, <<, >>, mod, rem
200 xfx **
200 xfy ^
Prolog provee ciertos predicados predefinidos
para realizar operaciones aritméticas básicas.
+ Adición
- Sustracción
* Multiplicación
/ División
mod Módulo
div División entera
. . . . . .
?- X = 1 + 2, display(X), Y is X.
+(1, 2)
X = 1+2
Y = 3
TRUE
Operadores relacionales predefinidos
X > YX es mayor que Y
X < YX es menor que Y
X >= YX es mayor o igual que Y
X =< YX es menor o igual que Y
X =:= YLos valores de X e Y son iguales
X =\= YLos valores de X e Y no son iguales
Consultar un programa
Cualquier programa en Prolog tiene que estar escrito en un fichero de texto plano (sin formato). La
manera mas sencilla es usar el Bloc de Notas. Dicho archivo debe poseer la extensin ”.pl” para indicar
que contiene codigo fuente de Prolog
Variables:
El identificador de una variable tendr´a que tener su primera letra en may´usculas.
Ej: X, Atapuerca, Cobaltina, RADgtfCdf
Constantes:
La primera letra de una constante deber´a estar escrita en min´usculas.
Ej: a, incienso, roberto, rADgtfCdf
Tambi´en se consideran constantes a los n´umeros,
Ej: 1, 5.02, 0.7
las palabras entre comillas simples
Ej: ’a’, ’A’, ’a a’
y la lista vac´a [ ].
Funciones:
Al igual que las constantes, su primera letra debe ser una min´uscula. Deber´a estar seguido de un
conjunto de t´erminos (otras funciones, variables o constantes) encerrados entre par´entesis.
Ej: f(c,X), conc arbol(Hijo Izq, Raiz, Hijo Der), rADgtfCdf(RADgtfCdf, rADgtfCdf)
Predicados:
Su sintaxis es la misma que la de las funciones aunque, por su localizaci´on dentro de la cl´ausula (es
decir, dentro del programa Prolog), el compilador los identificar´a como tal, y no como funciones.
Ej: f(c,X), conc arbol(Hijo Izq, Raiz, Hijo Der), rADgtfCdf(RADgtfCdf, rADgtfCdf)
Tambi´en existe la posibilidad de tener predicados 0-arios
Hechos:
Son cl´ausulas de Horn que poseen un ´unico predicado en la cabeza y ninguno en el cuerpo. Tienen
la siguiente forma en sintaxis de l´ogica de primer orden:
P
En Prolog no se escribe la flecha sino que se pone un punto al final:
p.
donde p es un predicado y tiene que seguir su sintaxis. Ej:
padre(aaron, maria).
compositor(shostakovich).
shostakovich(compositor).
Reglas:
Son cl´ausulas de Horn que poseen un ´unico predicado en la cabeza y uno o m´as en el cuerpo.
Tienen la siguiente pinta:
P Q1,Q2,Q3 escritos en sintaxis clausular o
P Q1 ^ Q2 ^ Q3 escritos en sintaxis de l´ogica de primer orden.
En Prolog la flecha se sustituye por ”:-”, las conectivas conjuntivas se escriben como comas ”,” y
la regla termina en punto:
p :- q1, q2, q3.
donde, al igual que los hechos, p y q1, q2 y q3 son predicados. Ej:
cuadrado(X) :- poligono(X), numero_lados(X,4).
Objetivos:
Son cl´ausulas de Horn que no poseen ning´un predicado en su cabeza:
Q1,Q2,Q3
Los predicados se escriben separados por comas y terminados en punto. S´olo pueden sen lanzados
desde el shell de SWI-Prolog.
?- padre(X, Y),padre(Y, Z).
Es importante recordar que
un mismo grafo puede tener
diferentes representaciones gráficas
Gracias
un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre elementos de un conjunto.
?- progenitor (jorge,miguel)
?- progenitor (teresa,raquel)
Pedro
Maria
Ver la lista de comandos
elena
Teresa
Jorge
Raquel
Miguel
progenitor (pedro, teresa).
False
progenitor (maria, teresa).
X= teresa;
Modo depuracion
progenitor (maria, elena).
progenitor (teresa,raquel).
?- progenitor (X,raquel).
progenitor (rauel,miguel).
False
Y= jorge;
?- progenit0r(teresa,Y).
Tipo de operador
Progenitor
Descendiente