2014-09-13 3 views
0

Je suis nouveau aux concepts de Datalog, et je l'explore par pyDatalog. J'expérimente avec un convertisseur de mesure unitaire. Donc, étant donné les faits sur le nombre de pouces dans un mètre, par exemple, il devrait être capable de me dire combien de mètres il y a dans un pouce. Voici mon code à ce jour:Pourquoi la création d'une relation dans pyDatalog semble-t-elle me donner la mauvaise réponse?

from pyDatalog import pyDatalog 
from pyDatalog.pyDatalog import create_terms as cterms 

pyDatalog.create_terms('scale') # the long way of doing it 
cterms('A, B, V') 
scale['meter', 'inch'] = 39.3707787 
scale[A, B] = 1/ scale[B, A]  
print(scale['inch', 'meter'] == V) 

WNY ne pas le programme convertir les pouces en mètres correctement? Il devrait voir qu'il y a 39,37 pouces dans un mètre, et appliquer la règle réciproque pour convertir l'autre sens. Donc, il devrait imprimer 0.0234, mais il imprime réellement

V 
---------- 
39.3707787 
+0

Probablement un meilleur tag aiderait les gens à trouver cette question. Il semble n'avoir aucun rapport avec la programmation logique, mais avec Python. –

+2

Je ne suis pas d'accord. La page Support & Community de [link] (https://sites.google.com/site/pydatalog/support) indique: "Veuillez publier des questions sur l'utilisation de pyDatalog sur StackOverflow (assurez-vous d'ajouter l'étiquette de programmation logique à le bas du formulaire). " – blippy

+0

Désolé, je n'étais pas au courant de ça. Merci pour la correction. –

Répondre

1

C'est un bug. Correction est maintenant fait dans changeset b1a5df9, et sera disponible dans la prochaine version. En attendant, vous pouvez vouloir appliquer le changeset sur votre système.

+0

Excellent. Je vous remercie. Je peux confirmer que le correctif est correct. J'étais alors en mesure d'étendre mon programme à dire échelle [ 'mile', 'pouce'] = 63360,0, et à l'échelle [A, B] = échelle [A, C] * échelle [C, B]. Sur ce, le programme était automatiquement capable de déduire le nombre de mètres dans un mile. Très propre. Roches Datalog! – blippy

+0

Merci. Je suis content que vous l'aimez. Je – user474491

+0

réussi à terminer mon programme de conversion de l'unité, et a écrit un [article de blog] (http://mcturra2000.wordpress.com/2014/09/14/logic-programming-example-unit-conversion-using-datalog/) à propos de il. Je pense que cela devrait inciter les gens à se demander comment la programmation logique peut effectuer des calculs plus facilement que s'il fallait coder à la main des solutions. – blippy

Questions connexes