On me dit qu'un prédicat spécifique doit fonctionner en mode +, +. Qu'est-ce que cela signifie dans Prolog?Que signifie le mode +, + dans Prolog?
Répondre
Quand on veut donner des informations sur un prédicat Prolog, ces conventions sont souvent utilisées:
arité: prédicat/3 signifie prédicat prend 3 arguments.
paramètres: predicate (+ Element, + List, -Result) signifie que Element et List ne doivent pas être des variables libres et que Result doit être une variable libre pour que le prédicat fonctionne correctement. ? est utilisé quand il peut être les deux, @ est mentionné sur la réponse ci-dessus mais n'est pas vraiment utilisé autant (au moins dans swi-pl doc) et signifie que l'entrée ne sera pas liée pendant l'appel.
si disant que somepredicate fonctionne en +, + mode est un raccourci pour dire que:
% somepredicate/2 : somepredicate(+Input1, +Input2)
Cela signifie que les arguments du prédicat seront tous les deux des arguments d'entrée (mais pas une entrée pure).
This page a une description succint de tous les modes d'appel de Prolog.
Afin de vous donner une réponse définitive, vous devez nous dire plus que +, +. Pour les prédicats dont les arguments ne sont que des atomes, les choses sont bien définies: p (+, +) signifie que le prédicat ne doit être appelé que si les deux arguments sont des atomes. Mais si nous avons, disons des listes, les choses sont plus complexes. Il y a deux significations dans ce cas. Considérons member/2
qui succède à member(2,[1,2,3])
.
Les requêtes member(2,[X])
ou member(2,[X|Xs])
sont-elles maintenant +, + ou non?
L'interprétation directe qui est également utilisé dans la norme ISO Prolog dit que (citant 8.1.2.2 mode d'un argument, de la norme ISO/CEI 13211-1: 1995):
+
l'argument doit être instancié,
Dans ce sens, les deux requêtes ci-dessus sont +, +. Cependant, il existe une autre interprétation qui suppose implicitement que nous avons accès à la définition du prédicat. Cette interprétation provient des déclarations de mode de DEC-10 Prolog, l'un des premiers systèmes Prolog. permet donc regarder à member/2
:
member(X, [X|_]).
member(X, [_|Xs]) :-
member(X, Xs).
Un mode member(+,+)
serait maintenant dire que lors de l'exécution d'un but, ce mode pour tenir tous sous-buts. Cela signifie que member(2,[X])
serait +, + alors que member(2,[X|Xs])
est et non en raison de son sous-objectif member(2,Xs)
.
Les gens confondent assez souvent ces notions. Donc, quand vous parlez de listes ou d'autres termes composés, il est utile de demander ce que l'on veut dire.
Pour plus d'informations sur les modes, voir this answer.
- 1. Que signifie le/2/3 dans prolog?
- 2. Que signifie cette syntaxe? (Prolog)
- 3. Que fait le \ + dans Prolog?
- 4. Fichiers Prolog: Que signifie "run" swipl -f main.pl ""?
- 5. Que signifie le .. dans #include "../somefile.h" signifie
- 6. Que signifie $$ dans le shell?
- 7. Que signifie le signe &?
- 8. Que signifie le symbole "⌅"?
- 9. Que signifie le chemin "//"?
- 10. Que signifie "limaces" signifie
- 11. Que signifie?: Signifie?
- 12. Que signifie "L", "[" et ";" signifie dans le code smali?
- 13. Que signifie supprimer le cache signifie dans NodeJS
- 14. Que signifie le '0' dans la ligne 41? Que signifie le '0' dans la ligne 41?
- 15. Qu'est-ce que cela signifie d'exécuter PHP en mode silencieux?
- 16. que fait slash (/) dans prolog?
- 17. Que signifie data ... où signifie dans Haskell?
- 18. Que signifie "% .6d" signifie dans printf
- 19. Que signifie = + signifie dans une requête Oracle
- 20. Que signifie «_» dans Razor?
- 21. Que signifie $ ([]) dans jQuery?
- 22. Que signifie ~ = dans MATLAB?
- 23. Que signifie + dans CSS?
- 24. Que signifie "#" dans MySQL?
- 25. Que signifie^dans glob.h?
- 26. Que signifie `~` dans Haskell?
- 27. Que signifie ** dans Phing?
- 28. Que signifie $() dans jquery
- 29. Que signifie (+) dans SQL?
- 30. que signifie C1 dans le puzzle cryptarithmétique de polog?
Voir aussi [this] (http://stackoverflow.com/q/19268558/1153801) question. – SND