Prolog Language
Estructuras de datos
Buscar..
Liza
Las listas son un tipo especial de término compuesto . Las listas se definen inductivamente:
- el átomo
[]
es una lista, que denota la lista vacía . - si
Ls
es una lista, entonces el término'.'(L, Ls)
también es una lista.
Hay una sintaxis especial para denotar listas convenientemente en Prolog:
- La lista
'.'(a, '.'(b, '.'(c, [])))
también se puede escribir como[a,b,c]
. - El término
'.'(L, Ls)
también se puede escribir como[L|Ls]
.
Estas notaciones se pueden combinar de cualquier manera. Por ejemplo, el término [a,b|Ls]
es una lista si Ls
es una lista.
Creando listas
Una lista que consta de literales unificados con la lista de variables:
?- List = [1,2,3,4].
List = [1, 2, 3, 4].
Construyendo una lista por medio de:
?- Tail = [2, 3, 4], List = [1|Tail].
Tail = [2, 3, 4],
List = [1, 2, 3, 4].
Construyendo una lista de valores desconocidos usando la length/2
incorporada length/2
:
?- length(List,5).
List = [_G496, _G499, _G502, _G505, _G508].
Como en Prolog todo es en esencia un término, las listas se comportan de forma heterogénea:
?- List = [1, 2>1, this, term(X), 7.3, a-A].
List = [1, 2>1, this, term(X), 7.3, a-A].
Esto significa que una lista también puede contener otras listas, también llamadas listas internas:
List = [[1,2],[3,[4]]].
Pares
Por convención, el functor (-)/2
se usa a menudo para denotar pares de elementos en Prolog. Por ejemplo, el término -(A, B)
denota el par de elementos A
y B
En Prolog, (-)/2
se define como un operador de infijo . Por lo tanto, el término se puede escribir de manera equivalente como AB
.
Muchos predicados comúnmente disponibles también usan esta sintaxis para denotar pares. Ejemplos de esto son keysort/2
y pairs_keys_values/3
.
Listas de asociaciones
En todos los sistemas Prolog serios, las listas de asociación están disponibles para permitir un acceso más rápido que lineal a una colección de elementos. Estas listas de asociaciones suelen basarse en árboles equilibrados como los árboles AVL . Existe una biblioteca de dominio público llamada library(assoc)
que se envía con muchos sistemas Prolog y proporciona operaciones O (log (N)) para insertar, recuperar y cambiar elementos a una colección.
Condiciones
En un nivel muy alto, Prolog solo tiene un tipo de datos único, denominado término . En Prolog, todos los datos están representados por términos Prolog. Los términos se definen inductivamente:
- un átomo es un término. Ejemplos de átomos son:
x
,test
y'quotes and space'
. - una variable es un termino Las variables comienzan con una letra mayúscula o un guión bajo
_
. - Los enteros y los números de punto flotante son términos. Ejemplos:
42
y42.42
. - un término compuesto es un término, definido inductivamente de la siguiente manera: Si
T1
,T2
, ...,T_n
son términos, entonces F (T1
,T2
, ...,T_n
) también es un término, donde F se denomina functor de El término compuesto.
Términos con campos nombrados usando biblioteca (registro)
La biblioteca [record][1]
proporciona la capacidad de crear términos compuestos con campos nombrados. La directiva :- record/1 <spec>
compila en una colección de predicados que inicializan, establecen y obtienen campos en el término definido por <spec>
.
Por ejemplo, podemos definir un point
estructura de datos con campos denominados x
e y
:
:- use_module(library(record)).
:- record point(x:integer=0,
y:integer=0).
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
?- default_point(Point), point_x(Point, X), set_x_of_point(10, Point, Point1).
Point = point(0, 0),
X = 0,
Point1 = point(10, 0).
?- make_point([y(20)], Point).
Point = point(0, 20).
?- is_point(X).
false.
?- is_point(point(_, _)).
false.
?- is_point(point(1, a)).
false.
?- is_point(point(1, 1)).
true.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */