J'ai un très grand nombre d'équations que j'essaie d'utiliser PROLOG pour résoudre. Cependant, je suis venu un mineur cropper en ce sens qu'ils ne sont pas spécifiés dans un ordre quelconque - c'est-à-dire, certaines, sinon beaucoup de variables, sont utilisées avant d'être définies. Ceux-ci sont tous spécifiés dans le même prédicat. PROLOG peut-il gérer les prédicats spécifiés dans un ordre aléatoire?Ordre de prédiction PROLOG
Répondre
Absolument ... ni (en italien, Oui et Non)
C'est, idéalement Prolog exige que vous spécifiez ce que doit être calculé, non comment, écrivant les équations contrôler la solution sous une forme logique assez générale, Horn clauses.
Mais cet idéal est loin d'être atteint, et c'est le point où nous, en tant que programmeurs, jouons un rôle. Vous devriez essayer de trier topologiquement les formules, si vous voulez que Prolog applique des algorithmes/arithmétiques.
Mais à ce stade, Prolog n'est pas plus utile que tout autre langage procédural. Il est simplement plus facile de faire ce type topologique, en ce sens que les formules peuvent être read (ceci est un analyseur Prolog complet!), Des variables identifiées et quantifiées facilement, des termes transformés, évalués, etc. (caractéristiques des métaux, un point fort de Prolog).
La situation change si vous pouvez utiliser CLP(FD). Juste un exemple, un factoriel bidirectionnel (cool, non?), De la documentation de la mise en œuvre brillante qui Markus Triska développé pour SWI-Prolog:
You can also use CLP(FD) constraints as a more declarative alternative for ordinary integer arithmetic with is/2, >/2 etc. For example:
:- use_module(library(clpfd)).
n_factorial(0, 1).
n_factorial(N, F) :- N #> 0, N1 #= N - 1, F #= N * F1, n_factorial(N1, F1).
This predicate can be used in all directions. For example:
?- n_factorial(47, F).
F = 258623241511168180642964355153611979969197632389120000000000 ;
false.
?- n_factorial(N, 1).
N = 0 ;
N = 1 ;
false.
?- n_factorial(N, 3).
false.
To make the predicate terminate if any argument is instantiated, add the (implied) constraint F #\= 0 before the recursive call. Otherwise, the query n_factorial(N, 0) is the only non-terminating case of this kind.
Ainsi, si vous écrivez vos équations dans CLP (FD) vous avez beaucoup plus de chances d'avoir votre «système d'équation» résolu tel quel. SWI-Prolog a un débogage dédié pour les détails de bas niveau utilisés pour résoudre CLP (FD).
HTH
La bibliothèque n'inclut pas certains opérateurs dont j'ai besoin, principalement des opérateurs binaires. – Puppy
Je pense que dans SWI-Prolog, la bibliothèque CLP (FD) a la plupart, sinon la totalité, des prédicats arithmétiques. Mais si vous en manquez un, je ne vois pas d'autre moyen que de réordonner les variables dans votre prédicat. – CapelliC
- 1. prédiction google api tutoriel « bonjour de prédiction »
- 2. Logique de premier ordre Prolog - Impression d'une table de vérité
- 3. prédiction sortie
- 4. Prédiction de branchement
- 5. prédiction de branchement
- 6. Intervalles de prédiction R
- 7. Prédiction du temps de traitement
- 8. Calcul d'un score de prédiction
- 9. Gestures prédiction dans Android
- 10. Prédiction hiérarchique utilisant R
- 11. logique de premier ordre & prologue
- 12. Définition de type Prolog dans swi-prolog
- 13. régression logistique fonction de prédiction de R
- 14. Problème de prédiction de gestes dans android
- 15. Conseils de prédiction de branchement portable
- 16. Explication de syntaxe de prédiction SVR
- 17. Auto prédiction dans un ListView
- 18. Prédiction itérative des modèles dyn
- 19. Je veux des listes d'algorithmes de prédiction/prédiction que je peux essayer pour l'expérience d'échantillon
- 20. Prédiction de mots dans une application mobile
- 21. Désactivation/modification de la prédiction Eclipse
- 22. Comment fonctionne l'API de prédiction google?
- 23. ARMA hors échantillon de prédiction avec statsmodels
- 24. Espace disque Prédiction à l'aide de R
- 25. Prolog findall Implémentation
- 26. Prolog - ASP 'not' à Prolog invalider
- 27. atome Prolog concat SWI et Yap Prolog
- 28. Comment écrire une instruction Prolog pour éliminer tous les éléments même ordre dans une liste
- 29. opération de liste Prolog
- 30. Problèmes de prédicat Prolog
Cela pourrait être utile légère - http://stackoverflow.com/questions/1425009/how-do-i-need-to-order-these-prolog-rules-so- i-can-run-my-program – ravi