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.


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow