2011-12-10 3 views
1

Je suis nouveau à datalog et que vous souhaitez résoudre les éléments suivants:datalog pour trouver même valeur des attributs d'un modèle

J'ai un modèle student

student(name, rollno, city) 

Maintenant, je veux écrire un programme d'enregistrement de données pour trouver la paire d'étudiants qui viennent de la même ville. Est-ce correct si j'écris le programme comme suit?

result(n1, r1, c1, n2, r2, c2) :- student(n1, r1,c1) AND student(n2,r2,c2) AND c1= c2 

Comme r1 et r2 ne sont pas d'une grande importance ici que je peux remplacer par _ dans la la tête et le corps?

Tous les commentaires sont les bienvenus!

Répondre

1

Il est correct d'utiliser le trait de soulignement à la place du rouleau dans la partie droite de votre logique.

J'aurais choisi un style de prédicat légèrement différent pour contenir les résultats. J'écris dans la variante LogicBlox de Datalog pour le travail et je pense que notre notation varie de la vôtre un peu, mais voici comment je le ferais ...

student(name, rollno, city) -> string(name), string(rollno), string(city). 

studentsPairsFromSameCity(nameA, nameB, city) -> string(nameA), string(nameB), string(city). 

studentPairsFromSameCity(nameA, nameB, city) 
<- 
    student(nameA, _, cityA), 
    student(nameB, _, cityB), 
    nameA != nameB, 
    cityA = cityB. 
Questions connexes