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
Lses 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,testy'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:
42y42.42. - un término compuesto es un término, definido inductivamente de la siguiente manera: Si
T1,T2, ...,T_nson 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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */