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:

  1. La lista '.'(a, '.'(b, '.'(c, []))) también se puede escribir como [a,b,c] .
  2. 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 y 42.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.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow