Prolog Language
Programmation d'ordre supérieur
Recherche…
appel / N prédicats
La famille de prédicats call/N
peut appeler des objectifs Prolog arbitraires au moment de l'exécution:
?- G=true, call(G).
true.
?- G=(true,false), call(G).
false.
mapliste / [2,3]
maplist/2
et maplist/3
sont des prédicats d'ordre supérieur, qui permettent de définir un prédicat à partir d'un seul élément pour les répertorier . Ces prédicats peuvent être définis à l'aide de call/2
et call/3
tant que blocs de construction et livrés avec de nombreux systèmes Prolog.
Par exemple:
?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).
Meta-call
Dans Prolog, le méta-appel est une fonctionnalité de langage intégrée. Tout code Prolog est représenté par des termes Prolog, ce qui permet de construire des objectifs de manière dynamique et de les utiliser comme d'autres objectifs sans prédicats supplémentaires:
?- Goal = dif(X, Y), Goal.
dif(X, Y).
En utilisant ce mécanisme, d'autres prédicats d'ordre supérieur peuvent être définis dans Prolog lui-même.
foldl / 4
Un pli (de gauche) est une relation d'ordre supérieur entre:
- un prédicat avec 3 arguments
- une liste d'éléments
- un état initial
- un état final, qui résulte de l'application du prédicat à des éléments successifs lors de la traversée d'états intermédiaires.
Par exemple: Utilisez foldl/4
pour exprimer la somme de tous les éléments d’une liste, en utilisant un prédicat comme bloc de construction pour définir la somme de deux éléments:
?- foldl(plus, [2,3,4], 0, S).
S = 9.
Appeler une liste d'objectifs
Pour appeler une liste d'objectifs comme s'il s'agissait d'une conjonction d'objectifs, combinez les prédicats d'ordre supérieur / 1 et maplist / 2:
?- Gs = [X = a, Y = b], maplist(call, Gs). Gs = [a=a, b=b], X = a, Y = b.