Prolog Language
Programación de orden superior
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.