Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ingeniería
Departamento de Ingeniería Informática
Paradigmas de programación
% Hechos
% Chofer y su especializacion
conductor(tipo_A, juan).
conductor(tipo_A, pedro).
conductor(tipo_B, rodrigo).
conductor(tipo_B, jose).
conductor(tipo_C, maria).
% especializacion y tipo
especialidad(tipo_A, alstom_A22).
especialidad(tipo_A, caf_az32t).
especialidad(tipo_B, alstom_A22).
especialidad(tipo_C, caf_az32t).
1
Unidad 2 – Programación lógica 2-2013
Universidad de Santiago de Chile
Facultad de Ingeniería
Departamento de Ingeniería Informática
Paradigmas de programación
% Al hacer la sustitución de TIPO por alstom_A22, la aserción es
% verdadera.
tren(TIPO, 29).
% Al hacer la sustitución de TIPO por alstom_A22 (Y) TREN por 29 la
% aserción es verdadera.
tren(TIPO, TREN), TREN=29.
conductor(tipo_A, PERSONA).
conductor(TIPO, PERSONA), TIPO=tipo_A.
Por otro lado, también podemos definir una nueva cláusula que responda la pregunta
anterior:
tipo_AyB(CONDUCTOR):-
conductor(tipo_A, CONDUCTOR);
conductor(tipo_B, CONDUCTOR).
RELACIONES ARITMÉTICAS
Es posible definir relaciones aritméticas las cuales pueden ser comparadas con los
operadores booleanos. Supongamos que la aserción punto(X, Y) representa al par
ordenado (x, y), un punto en un espacio bidimensional.
2
Unidad 2 – Programación lógica 2-2013
Universidad de Santiago de Chile
Facultad de Ingeniería
Departamento de Ingeniería Informática
Paradigmas de programación
origen(punto(X, Y)):-
X=0, Y=0.
pertenece(punto(X,Y), R):-
X*X+Y*Y<R*R.
Una lista es un caso especial de estructura o aserción. Está definida como la estructura
[X|Xs] donde X es la cabeza de la fila y Xs el resto o “cola” de la lista. El átomo [ ]
denota la lista vacía. Luego, una lista puede ser definida como una estructura recursiva:
contiene([X|Xs], X).
contiene([X|Xs], Y):-
contiene(Xs, Y).
3
Unidad 2 – Programación lógica 2-2013
Universidad de Santiago de Chile
Facultad de Ingeniería
Departamento de Ingeniería Informática
Paradigmas de programación
Ys => [Y|Ys]
[4]
[3|[4, []]]
[2|[3, [4, []]]]
[1|[2, [3, [4, []]]]]
[1, 2, 3, 4]
Esto se conoce como el supuesto del mundo cerrado, donde una aserción es falsa
cuando no puede inferirse que es verdadera. Prolog asume que toda la información
relevante del problema se encuentra contenida en las cláusulas definidas por el
programador (el mundo).
4
Unidad 2 – Programación lógica 2-2013
Universidad de Santiago de Chile
Facultad de Ingeniería
Departamento de Ingeniería Informática
Paradigmas de programación
cometa (C) :-
not(planeta(C)), not(satelite(C)).
cometa(cometa_halley).
¡Retornado verdadero solo por coincidencia! Dado el supuesto, y con aserciones unarias
solo para planetas y satélites, Prolog asume que si no es planeta y no es satélite,
entonces es cometa. Por lo anterior, se debe tener precaución en el sentido que se les
da a las cláusulas y como son escritas.
5
Unidad 2 – Programación lógica 2-2013