Buscar..


predicados de llamada / N

La familia de predicados call/N puede llamar objetivos Prolog arbitrarios en tiempo de ejecución:

?- G=true, call(G).
true.

?- G=(true,false), call(G).
false.

maplista / [2,3]

maplist/2 y maplist/3 son predicados de orden superior, que permiten que la definición de un predicado se levante de un solo elemento a las listas de dichos elementos. Estos predicados se pueden definir utilizando call/2 y call/3 como bloques de construcción y se envían con muchos sistemas Prolog.

Por ejemplo:

?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).

Meta-llamada

En Prolog, la llamada meta-llamada es una función de lenguaje incorporada. Todo el código de Prolog está representado por los términos de Prolog, lo que permite que los objetivos se construyan dinámicamente y se usen como otros objetivos sin predicados adicionales:

?- Goal = dif(X, Y), Goal.
dif(X, Y).

Usando este mecanismo, otros predicados de orden superior pueden definirse en el propio Prolog.

foldl / 4

Un pliegue (desde la izquierda) es una relación de orden superior entre:

  • un predicado con 3 argumentos
  • una lista de elementos
  • un estado inicial
  • un estado final, que es el resultado de aplicar el predicado a elementos sucesivos mientras se transporta a través de estados intermedios.

Por ejemplo: use foldl/4 para expresar la suma de todos los elementos en una lista, usando un predicado como bloque de construcción para definir la suma de dos elementos:

?- foldl(plus, [2,3,4], 0, S).
S = 9.

Llama a una lista de objetivos

Para llamar a una lista de objetivos como si fuera una conjunción de objetivos, combine los predicados de orden superior call / 1 y maplist / 2:

?- Gs = [X = a, Y = b], maplist(call, Gs).
Gs = [a=a, b=b],
X = a,
Y = b.


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